Sådan udgives som en separat fil uden at blive inkluderet i en enkelt kørende fil

Side opdateret :
Dato for oprettelse af side :

Miljø

Visuel Studio
  • Visual Studio 2019
ASP.NET Kerne
  • 3.1

Hvad er en enkelt fil?

Ud over exe-filen skal du ofte bruge en fil, f.eks. Du vil distribuere flere filer og programmer.

Du kan nu køre alle filerne i én exe ved at udgive programmet ved hjælp af funktionen "Opret enkelt fil", der er tilføjet fra .NET Core 3.0. (Fbf-filen er en fejlfindingsfil, så du ikke behøver at distribuere den).

I nogle tilfælde kan det dog være en god ide at placere en konfigurationsfil i en mappe med exe i stedet for at medtage den i exe'en. I dette afsnit beskrives, hvordan du gør dette.

Forbereder output med en enkelt fil

Som eksempel skal følgende projektkonfiguration bruges til at indlæse filen TextFile1.txt ved start. TextFile1.txt er beregnet til at blive distribueret sammen med exe-filen, så gør det til "Build Action: None" og "Copy to Output Directory: Copy to New If New". Indholdet af TextFile1.txt kan være vilkårligt.

Du kan oprette et program med den antagelse, at du vil indlæse filer, der er fordelt sammen.

Den eksekverbare fil i en enkelt fil udvides dog faktisk til en separat midlertidig mappe, når den køres. Når du indlæser en fil i en relativ sti, skal du angive den i den mappe, hvor du startede den eksekverbare fil, ikke i den mappe, hvor den eksekverbare fil er placeret.

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 foretager fejlfinding, kan du se, at filen er indlæst.

TextFile1.txt udskrives også i outputmappen, fordi den endnu ikke er blevet kompileret i en enkelt fil.

Lad os udgive det som en enkelt fil i denne tilstand. Proceduren udelades, fordi publikationen ikke er tilsigtet.

Målkørslen skal være ikke-bærbar for at være en enkelt fil.

Jeg har ikke sat noget endnu, så det er en fil som sædvanlig.

Der er ingen TextFile1.txt, når du kører det, så du vil få en fejl.

Sådan udgives en bestemt fil uden at medtage den i en enkelt fil

Åbn projektfilen (csproj) i kode med den fil, du ikke vil medtage i projektet.

Jeg synes, det er xml som denne: Se efter den fil, du vil ændre indstillinger for. Afhængigt af dine projektindstillinger har du muligvis ikke en destinationsfil, så det kan være nødvendigt at tilføje den manuelt.

<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 finder filen, skal du tilføje ExcludeFromSingleFile med true på følgende måde: Som navnet antyder, er det udelukket fra en enkelt 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>

Prøv at udgive, når du har gemt. Du kan se, at den er udgivet ud af en enkelt fil.

Du kan stadig køre den publicerede fil for at kontrollere, at den fungerer korrekt.