Comment publier en tant que fichier distinct sans être inclus dans un fichier unique

Page mise à jour :
Date de création de la page :

Environnement

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

Qu’est-ce qu’un seul fichier ?

En plus du fichier exe, vous aurez souvent besoin d’un fichier tel qu’un dll pour exécuter un programme. Vous distribuerez plusieurs fichiers et programmes.

Vous pouvez maintenant exécuter tous les fichiers dans un exe en publiant le programme à l’aide de la fonctionnalité « Créer un fichier unique » ajoutée à partir de .NET Core 3.0. (Le fichier pdb est un fichier d’informations de débogage, de sorte que vous n’avez pas à le distribuer.)

Toutefois, dans certains cas, vous pouvez placer un fichier de configuration dans un dossier avec exe au lieu de l’inclure dans l’exe. Cette section décrit comment le faire.

Préparation de la sortie d’un fichier unique

En tant qu’exemple, la configuration de projet suivante doit être utilisée pour charger le fichier TextFile1.txt au démarrage. TextFile1.txt est destiné à être distribué avec le fichier exe, alors faites-le « Build Action: None » et « Copy to Output Directory: Copy to New If New. » Le contenu de TextFile1.txt peut être arbitraire.

Vous pouvez créer un programme avec l’hypothèse que vous souhaitez charger des fichiers qui sont distribués ensemble.

Toutefois, le fichier exécutable d’un seul fichier est en fait étendu à un dossier temporaire distinct lorsqu’il est exécuté. Lorsque vous chargez un fichier dans un chemin d’accès relatif, vous devez le spécifier dans le dossier où vous avez démarré le fichier exécutable, et non dans le dossier où se trouve le fichier exécutable.

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

Lorsque vous déboguez, vous pouvez voir que le fichier est chargé.

TextFile1.txt est également imprimé dans le dossier de sortie car il n’a pas encore été compilé dans un seul fichier.

Publions-le comme un seul fichier dans cet état. La procédure est omise parce que la publication n’est pas prévue.

L’exécution cible doit être non portable pour être un seul fichier.

Je n’ai encore rien réglé, donc c’est un fichier comme d’habitude.

Il n’y a pas de TextFile1.txt lorsque vous l’exécutez, de sorte que vous obtiendrez une erreur.

Comment publier un fichier spécifique sans l’inclure dans un seul fichier

Ouvrez le fichier de projet (csproj) dans le code avec le fichier que vous ne souhaitez pas inclure dans le projet.

Je pense que c’est xml comme ceci: Recherchez le fichier pour lequel vous souhaitez modifier les paramètres. Selon les paramètres de votre projet, il se peut que vous n’ayez pas de fichier cible, de sorte que vous devrez peut-être l’ajouter manuellement.

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

Lorsque vous trouvez le fichier, ajoutez ExcludeFromSingleFile avec true, comme suit : Comme son nom l’indique, il est exclu d’un seul fichier.

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

S’il vous plaît essayer de publier une fois que vous avez enregistré. Vous pouvez voir qu’il est publié à partir d’un seul fichier.

Vous pouvez toujours exécuter le fichier publié pour vérifier qu’il fonctionne correctement.