Publikování jako samostatný soubor bez zahrnutí do jednorázového souboru

Stránky aktualizovány :
Datum vytvoření stránky :

Prostředí

Vizuální studio
  • Visual Studio 2019
ASP.NET jádro
  • 3.1

Co je jeden soubor?

Kromě souboru exe budete často potřebovat k spuštění programu soubor, například knihovnu DLL. Budete distribuovat více souborů a programů.

Nyní můžete spustit všechny soubory v jednom exe publikováním programu pomocí funkce "Vytvořit jeden soubor" přidané z .NET Core 3.0. (Soubor PDB je informační soubor ladění, takže jej nemusíte distribuovat.)

V některých případech však můžete chtít umístit konfigurační soubor do složky s exe namísto jeho zahrnutí do exe. Tato část popisuje, jak to provést.

Příprava na výstup s jedním souborem

Jako ukázku by měla být použita následující konfigurace projektu k načtení souboru TextFile1.txt při spuštění. Soubor TextFile1.txt je určen k distribuci se souborem exe, proto jej vyhotovíme "Build Action: None" a "Copy to Output Directory: Copy to New If New". Obsah souboru TextFile1.txt může být libovolný.

Můžete vytvořit program s předpokladem, že chcete načíst soubory, které jsou distribuovány společně.

Spustitelný soubor v jednom souboru je však ve skutečnosti rozbalován do samostatné dočasné složky při spuštění. Když načtete soubor v relativní cestě, musíte jej zadat ve složce, ve které jste spustili spustitelný soubor, nikoli ve složce, kde je soubor spustitelný soubor umístěn.

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();
    }
  }
}

Při ladění můžete vidět, že soubor je načten.

Soubor TextFile1.txt je také vytištěn ve výstupní složce, protože ještě nebyl zkompilován do jednoho souboru.

Pojďme publikovat jako jeden soubor v tomto stavu. Postup je vynechán, protože publikace není určena.

Cílový modul runtime musí být nepřenosný, aby byl jeden soubor.

Ještě jsem nic nenastavil, takže je to jeden soubor jako obvykle.

Při spuštění není k dispozici žádný soubor TextFile1.txt, takže se zobrazí chyba.

Jak publikovat konkrétní soubor bez jeho zahrnutí do jednoho souboru

Otevřete soubor projektu (csproj) v kódu se souborem, který nechcete zahrnout do projektu.

Myslím, že je to xml takhle: Vyhledejte soubor, pro který chcete změnit nastavení. V závislosti na nastavení projektu pravděpodobně nemáte cílový soubor, takže jej možná budete muset přidat ručně.

<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>

Když najdete soubor, přidejte ExcludeFromSingleFile s true, takto: Jak název napovídá, je vyloučen z jednoho souboru.

<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>

Po uložení se pokuste publikovat. Můžete vidět, že je publikován z jednoho souboru.

Publikovaný soubor můžete spustit a ověřit, zda funguje správně.