Как опубликовать в качестве отдельного файла без включения в одноразовый файл
Среды
- Визуальная студия
-
- Визуальная студия 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>
Пожалуйста, попробуйте опубликовать, как только вы сохранили. Вы можете видеть, что он публикуется из одного файла.
Вы все еще можете запустить опубликованный файл, чтобы убедиться, что он работает правильно.