Közzététel külön fájlként anélkül, hogy egy futtatott fájlba bekerült volna?

Oldal frissítve :
Oldal létrehozásának dátuma :

Környezet

Vizuális stúdió
  • Visual Studio 2019
ASP.NET Core
  • 3.1

Mi az egyetlen fájl?

Az exe fájl mellett gyakran szüksége lesz egy fájlra, például egy dll-re egy program futtatásához. Több fájlt és programot fog terjeszteni.

Most már futtathatja az összes fájlt egy exe közzétételével a program segítségével a szolgáltatás "Create Single File" hozzá .NET Core 3.0. (A pdb fájl hibakeresési információs fájl, így nem kell terjeszteni.)

Bizonyos esetekben azonban előfordulhat, hogy egy konfigurációs fájlt egy exe mappába szeretne helyezni, ahelyett, hogy az exe-be helyezne. Ez a szakasz ennek módját ismerteti.

Felkészülés az egyfájlos kimenetre

Mintaként a következő projektkonfigurációt kell használni a TextFile1.txt fájl indításkortörténő betöltéséhez. A TextFile1.txt fájl az exe fájllal együtt kerül terjesztésre, ezért legyen "Build Action: None" és "Copy to Output Directory: Copy to New If New" ( Másolás új, ha új) fájlba. A TextFile1.txt fájl tartalma tetszőleges lehet.

Létrehozhat egy programot azzal a feltételezéssel, hogy az együttesen terjesztett fájlokat szeretné betölteni.

Az egyetlen fájlban lévő végrehajtható fájl futtatásakor azonban ténylegesen egy külön ideiglenes mappára bővül. Ha relatív elérési úton tölt be egy fájlt, azt abban a mappában kell megadnia, amelyben a végrehajtható fájlt indította, nem pedig abban a mappában, amelyben a végrehajtható fájl található.

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

Hibakereséskor láthatja, hogy a fájl be van töltve.

A TextFile1.txt fájl is a kimeneti mappába kerül, mert még nem lett egyetlen fájlba lefordítva.

Tegyük közzé egyetlen fájlként ebben az állapotban. Az eljárás kimarad, mert a kiadvány nem szándékos.

A cél futási idő nem hordozható, hogy egyetlen fájlt.

Én még nem állítottam semmit, így ez egy fájlt, mint rendesen.

A futtatásakor nincs TextFile1.txt fájl, így hibaüzenetet kap.

Adott fájl közzététele anélkül, hogy egyetlen fájlba ágyazna

Nyissa meg a projektfájlt (csproj) azzal a fájllal, amelyet nem kíván bevonni a projektbe.

Azt hiszem, ez xml, mint ez: Keresse meg azt a fájlt, amelynek beállításait módosítani szeretné. A projekt beállításaitól függően előfordulhat, hogy nincs célfájlja, ezért előfordulhat, hogy manuálisan kell hozzáadnia.

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

Ha megtalálta a fájlt, adja hozzá az ExcludeFromSingleFile fájlt az igaz értékkel, az alábbiak szerint: Ahogy a neve is mutatja, egyetlen fájlból ki van zárva.

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

Próbálja meg közzétenni, miután mentette. Láthatja, hogy egyetlen fájlból teszik közzé.

A közzétett fájl továbbra is futtatható annak ellenőrzéséhez, hogy megfelelően működik-e.