Publikovanie ako samostatný súbor bez zahrnutia do súboru s jedným spustením

Stránka aktualizovaná :
Dátum vytvorenia strany :

Životné prostredie

Vizuálne štúdio
  • Vizuálne štúdio 2019
Jadro ASP.NET
  • 3.1

Čo je jeden súbor?

Okrem exe súboru, budete často potrebovať súbor, ako je dll na spustenie programu. Budete distribuovať viac súborov a programov.

Teraz môžete spustiť všetky súbory v jednom exe publikovaním programu pomocou funkcie "Vytvoriť jeden súbor" pridané z .NET Core 3.0. (Súbor PNR je súbor s informáciami o ladení, takže ho nemusíte distribuovať.)

V niektorých prípadoch však možno budete chcieť umiestniť konfiguračný súbor do priečinka s exe namiesto zahrnutia do exe. Táto časť popisuje, ako to urobiť.

Príprava na výstup jedného súboru

Ako vzorka, nasledujúca konfigurácia projektu by sa mali použiť na načítanie súboru TextFile1.txt pri spustení. TextFile1.txt je určený na distribúciu s exe súbor, tak aby to "Build Action: None" a "Kopírovať do výstupného adresára: Kopírovať do nového ak nové." Obsah TextFile1.txt môže byť ľubovoľný.

Môžete vytvoriť program s predpokladom, že chcete načítať súbory, ktoré sú distribuované spoločne.

Spustiteľný súbor v jednom súbore je však skutočne rozšírený do samostatného dočasného priečinka pri jeho spustení. Keď načítate súbor v relatívnej ceste, musíte ho zadať v priečinku, v ktorom ste spustili spustiteľný súbor, nie v priečinku, v ktorom sa nachádza spustiteľný súbor.

using System;
using System.Diagnostics;
using System.IO;

namespace ExcludeFromSingleFile
{
  class Program
  {
    static void Main(string[] args)
    {
      using var processModule = Process.GetCurrentProcess().MainModule;
      Console.WriteLine(File.ReadAllText(Path.Combine(Path.GetDirectoryName(processModule.FileName), "TextFile1.txt")));
      Console.ReadKey();
    }
  }
}

Keď ladíte, môžete vidieť, že súbor je načítaný.

TextFile1.txt sa tiež vytlačí vo výstupnom priečinku, pretože ešte nebol zostavený do jedného súboru.

Zverejnime ho ako jeden súbor v tomto stave. Postup sa vynechá, pretože uverejnenie nie je určené.

Cieľový modul runtime musí byť neprenosný, aby bol jedným súborom.

Ešte som nič nenastavil, takže je to jeden súbor ako zvyčajne.

Neexistuje žiadny TextFile1.txt pri spustení, takže sa zobrazí chyba.

Ako publikovať konkrétny súbor bez zahrnutia do jedného súboru

Otvorte súbor projektu (csproj) v kóde so súborom, ktorý nechcete zahrnúť do projektu.

Myslím, že je to xml takhle: Vyhľadajte súbor, pre ktorý chcete zmeniť nastavenia. V závislosti od nastavenia projektu pravdepodobne nemáte cieľový súbor, takže ho možno budete musieť pridať manuálne.

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>netcoreapp3.1</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <None Update="TextFile1.txt">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
  </ItemGroup>
</Project>

Keď nájdete súbor, pridajte ExcludeFromSingleFile s pravdou, takto: Ako už názov napovedá, je vylúčený z jedného súboru.

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>netcoreapp3.1</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <None Update="TextFile1.txt">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
      <!-- ここから追加 -->
      <ExcludeFromSingleFile>true</ExcludeFromSingleFile>
      <!-- ここまで追加 -->
    </None>
  </ItemGroup>
</Project>

Pokúste sa publikovať po uložení. Môžete vidieť, že je publikovaný z jedného súboru.

Publikovaný súbor môžete spustiť aj na overenie, či pracuje správne.