Publiceren als een afzonderlijk bestand zonder te worden opgenomen in een bestand met één uitvoering

Pagina bijgewerkt :
Aanmaakdatum van pagina :

Milieu

Visual Studio
  • Visual Studio 2019
ASP.NET Kern
  • 3.1

Wat is een enkel bestand?

Naast het exe-bestand hebt u vaak een bestand zoals een dll nodig om een programma uit te voeren. U verspreidt meerdere bestanden en programma's.

U nu alle bestanden in één exe uitvoeren door het programma te publiceren met de functie 'Enkel bestand maken' die is toegevoegd vanuit .NET Core 3.0. (Het pdb-bestand is een foutopsporingsinformatiebestand, dus u hoeft het niet te verspreiden.)

In sommige gevallen u echter een configuratiebestand in een map met exe plaatsen in plaats van het op te nemen in de exe. In deze sectie wordt beschreven hoe u dit doen.

Voorbereiden op uitvoer met één bestand

Als voorbeeld moet de volgende projectconfiguratie worden gebruikt om het bestand TextFile1.txt bij het opstarten te laden. TextFile1.txt is bedoeld om te worden gedistribueerd met het exe-bestand, dus maak het 'Actie maken: geen' en 'Kopiëren naar uitvoermap: kopiëren naar nieuw als nieuw'. De inhoud van TextFile1.txt kan willekeurig zijn.

U een programma bouwen met de veronderstelling dat u bestanden wilt laden die samen worden gedistribueerd.

Het uitvoerbare bestand in één bestand wordt echter daadwerkelijk uitgebreid naar een afzonderlijke tijdelijke map wanneer het wordt uitgevoerd. Wanneer u een bestand in een relatief pad laadt, moet u het opgeven in de map waar u het uitvoerbare bestand hebt gestart, niet in de map waar het uitvoerbare bestand zich bevindt.

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

Wanneer u debuggen, u zien dat het bestand is geladen.

TextFile1.txt wordt ook afgedrukt in de uitvoermap omdat deze nog niet in één bestand is gecompileerd.

Laten we publiceren als een enkel bestand in deze staat. De procedure wordt weggelaten omdat de publicatie niet de bedoeling is.

De runtime van het doel moet niet-draagbaar zijn om één bestand te zijn.

Ik heb nog niets ingesteld, dus het is een bestand zoals gewoonlijk.

Er is geen TextFile1.txt wanneer u het uitvoert, dus u krijgt een foutmelding.

Een specifiek bestand publiceren zonder het in één bestand op te namen

Open het projectbestand (csproj) in code met het bestand dat u niet in het project wilt opnemen.

Ik denk dat het xml als volgt: Zoek naar het bestand waarvoor u de instellingen wilt wijzigen. Afhankelijk van uw projectinstellingen beschikt u mogelijk niet over een doelbestand, dus het kan nodig zijn om het handmatig toe te voegen.

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

Wanneer u het bestand vindt, voegt u ExcludeFromSingleFile als volgt toe: Zoals de naam al aangeeft, is het uitgesloten van één bestand.

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

Probeer te publiceren zodra je hebt opgeslagen. U zien dat het wordt gepubliceerd uit een enkel bestand.

U het gepubliceerde bestand nog steeds uitvoeren om te controleren of het correct werkt.