Как опубликовать в качестве отдельного файла без включения в одноразовый файл

Страница обновлена :
Дата создания страницы :

Среды

Визуальная студия
  • Визуальная студия 2019
ASP.NET Ядро
  • 3.1

Что такое единый файл?

В дополнение к файлу exe, вам часто понадобится файл, такой как dll для запуска программы. Вы будете распространять несколько файлов и программ.

Теперь вы можете запустить все файлы в одном exe, опубликовав программу с помощью функции "Создать единый файл", добавленную из .NET Core 3.0. (Файл Pdb — это файл информации отладки, поэтому не нужно распространять его.)

Однако в некоторых случаях может потребоваться поместить файл конфигурации в папку с exe вместо того, чтобы включить его в exe. В этом разделе описывается, как это сделать.

Подготовка к выходу из одного файла

В качестве примера следует использовать следующую конфигурацию проекта для загрузки файла TextFile1.txt при запуске. TextFile1.txt предназначен для распространения с файлом exe, так что сделайте его "Build Action: None" и "Копировать для вывода каталога: копировать в новый, если новый". Содержимое TextFile1.txt может быть произвольным.

Вы можете создать программу с предположением, что вы хотите загрузить файлы, которые распространяются вместе.

Однако исполняемый файл в одном файле фактически расширяется до отдельной временной папки при запуске. При загрузке файла в относительном пути необходимо указать его в папке, где вы начали исполняемый файл, а не в папке, где находится исполняемый файл.

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

При отладке можно увидеть, что файл загружается.

TextFile1.txt также печатается в выходной папке, поскольку она еще не была составлена в один файл.

Давайте опубликуем его в виде единого файла в этом состоянии. Процедура опущена, поскольку публикация не предназначена.

Целевое время выполнения должно быть не портативно, чтобы быть одним файлом.

Я еще ничего не установил, так что это один файл, как обычно.

Существует не TextFile1.txt, когда вы запустите его, так что вы получите ошибку.

Как опубликовать конкретный файл без включения его в один файл

Откройте файл проекта (csproj) в коде с файлом, который вы не хотите включать в проект.

Я думаю, что это xml, как это: Ищите файл, для которого вы хотите изменить настройки. В зависимости от настроек проекта может не быть целевого файла, поэтому может потребоваться добавить его вручную.

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

Когда вы найдете файл, добавить ExcludeFromSingleFile с правдой, следующим образом: Как следует из названия, он исключается из одного файла.

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

Пожалуйста, попробуйте опубликовать, как только вы сохранили. Вы можете видеть, что он публикуется из одного файла.

Вы все еще можете запустить опубликованный файл, чтобы убедиться, что он работает правильно.