se publică ca fișier separat fără a fi inclus într-un fișier cu o singură rulare

Pagina actualizată :
Data creării paginii :

Mediu

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

Ce este un singur fișier?

În plus față de fișierul exe, veți avea adesea nevoie de un fișier, ar fi un dll pentru a rula un program. Veți distribui mai multe fișiere și programe.

Acum aveți posibilitatea să executați toate fișierele într-un singur exe publicând programul utilizând caracteristica "Creare fișier unic" adăugată din .NET Core 3.0. (Fișierul pdb este un fișier de informații de depanare, astfel încât nu trebuie să-l distribuiți.)

Cu toate acestea, în unele cazuri, este posibil să doriți să plasați un fișier de configurare într-un folder cu exe în loc să-l includeți în exe. Această secțiune descrie se face acest lucru.

Pregătirea pentru ieșirea unui singur fișier

Ca exemplu, următoarea configurație de proiect trebuie utilizată pentru a încărca fișierul TextFile1.txt la pornire. TextFile1.txt este destinat să fie distribuit cu fișierul exe, astfel încât să-l "Build Action: None" și "Copy to Output Directory: Copy to New If New." Conținutul TextFile1.txt poate fi arbitrar.

Aveți posibilitatea să construiți un program cu presupunerea că doriți să încărcați fișierele care sunt distribuite împreună.

Cu toate acestea, fișierul executabil într-un singur fișier este de fapt extins la un folder temporar separat atunci când se execută. Când încărcați un fișier într-o cale relativă, trebuie să îl specificați în folderul în care ați pornit fișierul executabil, nu în folderul în care se află fișierul executabil.

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

Când depanați, puteți vedea că fișierul este încărcat.

TextFile1.txt este, de asemenea, imprimat în folderul de ieșire, deoarece nu a fost încă compilat într-un singur fișier.

Să-l publicăm ca un singur fișier în această stare. Procedura este omisă deoarece publicația nu este intenționată.

Runtime țintă trebuie să fie non-portabil pentru a fi un singur fișier.

Încă nu am setat nimic, deci e un fișier ca de obicei.

Nu există textFile1.txt atunci când îl executați, astfel încât veți primi o eroare.

se publică un anumit fișier fără a-l include într-un singur fișier

Deschideți fișierul proiect (csproj) în cod cu fișierul pe care nu doriți să îl includeți în proiect.

Cred că este xml ca aceasta: Căutați fișierul pentru care doriți să modificați setările. În funcție de setările proiectului, este posibil să nu aveți un fișier țintă, deci poate fi necesar să îl adăugați manual.

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

Când găsiți fișierul, adăugați ExcludeFromSingleFile cu true, după urmează: După sugerează și numele, acesta este exclus dintr-un singur fișier.

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

Încercați să publicați după ce ați salvat. Puteți vedea că este publicat dintr-un singur fișier.

Aveți în continuare posibilitatea să executați fișierul publicat pentru a verifica dacă funcționează corect.