Så här publicerar du som en separat fil utan att inkluderas i en fil med en enda körning

Sidan uppdaterad :
Datum för skapande av sida :

Miljö

Visuell studio
  • Visual Studio 2019
ASP.NET kärna
  • 3.1

Vad är en enda fil?

Förutom exe-filen behöver du ofta en fil som en dll för att köra ett program. Du kommer att distribuera flera filer och program.

Du kan nu köra alla filer i ett exe genom att publicera programmet med funktionen "Skapa en fil" som lagts till från .NET Core 3.0. (Pdb-filen är en felsökningsinformationsfil, så du behöver inte distribuera den.)

I vissa fall kanske du vill placera en konfigurationsfil i en mapp med exe i stället för att inkludera den i exe. I det här avsnittet beskrivs hur du gör detta.

Förbereda för enfilsutdata

Som ett exempel bör följande projektkonfiguration användas för att läsa in filen TextFile1.txt vid start. TextFile1.txt är avsedd att distribueras med exe-filen, så gör det "Bygg åtgärd: Ingen" och "Kopiera till utdatakatalog: Kopiera till nytt om nytt." Innehållet i TextFile1.txt kan vara godtyckligt.

Du kan skapa ett program med antagandet att du vill läsa in filer som distribueras tillsammans.

Den körbara filen i en enda fil expanderas dock till en separat temporär mapp när den körs. När du läser in en fil i en relativ sökväg måste du ange den i mappen där du startade den körbara filen, inte i mappen där den körbara filen finns.

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

När du felsöker kan du se att filen har lästs in.

TextFile1.txt skrivs också ut i utdatamappen eftersom den ännu inte har kompilerats till en enda fil.

Låt oss publicera den som en enda fil i det här tillståndet. Publiceringen ska inte vara avsedd.

Målkörningen måste vara icke-portabel för att vara en enda fil.

Jag har inte satt något ännu, så det är en fil som vanligt.

Det finns ingen TextFile1.txt när du kör den, så du får ett felmeddelande.

Så här publicerar du en viss fil utan att den inkluderas i en enda fil

Öppna projektfilen (csproj) i kod med den fil som du inte vill ta med i projektet.

Jag tror att det är xml så här: Leta efter den fil som du vill ändra inställningar för. Beroende på dina projektinställningar kanske du inte har någon målfil, så du kan behöva lägga till den manuellt.

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

När du hittar filen lägger du till ExcludeFromSingleFile med sant enligt följande: Som namnet antyder är det uteslutet från en enda fil.

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

Försök att publicera när du har sparat. Du kan se att den publiceras ur en enda fil.

Du kan fortfarande köra den publicerade filen för att kontrollera att den fungerar korrekt.