Com publicar-lo com a fitxer separat sense incloure'l en un fitxer d'una sola execució

Pàgina actualitzada :
Data de creació de la pàgina :

Medi ambient

Visual Studio
  • Visual Studio 2019
ASP.NET Core
  • 3,1

Què és un únic fitxer?

A més a més a l'arxiu d'exe, necessitarà sovint un arxiu com un dll per córrer un programa. Vostè distribuirà diversos arxius i programes.

Pot ara córrer tots els arxius en un exe publicant el programa que utilitza el tret "crear arxiu senzill" afegit des de .NET Core 3,0. (El fitxer PDB és un fitxer d'informació de depuració, de manera que no l'heu de distribuir.)

Tanmateix, en alguns casos, és possible que vulgueu col·locar un fitxer de configuració en una carpeta amb exe en lloc d'incloure-la a l'exe. Aquesta secció descriu com fer-ho.

Preparació per a la sortida d'un sol fitxer

Com a Mostra, la configuració següent del projecte s'ha d'utilitzar per carregar el fitxer TextFile1. txt a l'inici. TextFile1. txt està pensat per ser distribuït amb l'arxiu d'exe, així fer-lo "complexió acció: cap" i "còpia a guia de producció: copiï a nou si nou." El contingut de TextFile1. txt pot ser arbitrari.

Podeu construir un programa amb la suposició que voleu carregar els fitxers que es distribueixen junts.

Tanmateix, l'arxiu executable en un arxiu senzill s'expandeix de fet a una carpeta provisional separada quan s'executa. Quan carregueu un fitxer en un camí relatiu, heu d'especificar-lo a la carpeta on heu iniciat el fitxer executable, no a la carpeta on es troba el fitxer executable.

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

Quan es depura, es pot veure que el fitxer es carrega.

TextFile1. txt també està imprès a la carpeta de sortida perquè encara no s'ha compilat en un sol fitxer.

Anem a publicar-lo com un sol arxiu en aquest estat. El procediment és omès perquè la publicació no està destinada.

El temps d'execució de l'objectiu ha de ser no portàtil per ser un únic fitxer.

No he establert res encara, així que és un arxiu com de costum.

No hi ha cap TextFile1. txt quan el dirigeixi, així aconseguirà un error.

Com publicar un fitxer específic sense incloure'l en un únic fitxer

Obriu el fitxer del projecte (csproj) en codi amb el fitxer que no voleu incloure en el projecte.

Penso que sigui XML com això: Cerqueu el fitxer per al qual voleu canviar la configuració. En funció de la configuració del projecte, és possible que no tingueu un fitxer de destinació, de manera que és possible que hàgiu d'afegir-lo manualment.

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

Quan es troba el fitxer, afegir Excludefromsinglefile amb true, de la següent manera: Com el seu nom indica, s'exclou d'un sol fitxer.

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

Proveu de publicar-lo un cop hagueu desat. Podeu veure que es publica fora d'un únic fitxer.

Encara podeu executar el fitxer Publicat per verificar que funcioni correctament.