Как да публикувате като отделен файл, без да се включвате в едно изпълняван файл
Околната среда
- Визуално студио
-
- Изглед от 10 до 2008
- ASP.NET ядро
-
- 3.1
Какво е един файл?
В допълнение към exe файла, често ще ви е необходим файл, например dll, за да изпълните програма. Ще разпространявате няколко файла и програми.
Сега можете да стартирате всички файлове в един exe чрез публикуване на програмата с помощта на функцията "Създаване на единичен файл", добавен от .NET Core 3.0. (Файлът pdb е файл с информация за отстраняване на грешки, така че не е нужно да го разпространявате.)
В някои случаи обаче може да искате да поставите конфигурационен файл в папка с exe вместо да го включите в exe. Този раздел описва как да направите това.
Подготовка за извеждане на един файл
Като пример следните проект конфигурация трябва да се използва за зареждане на файла TextFile1.txt при стартиране. TextFile1.txt е предназначен за разпространение с exe файла, така че го направете "изграждане на действие: няма" и "Копирай в изходна директория: копирай в нов if New." Съдържанието на 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 с true, както следва: Както подсказва името, то е изключено от един файл.
<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>
Опитайте се да публикувате, след като сте записали. Можете да видите, че е публикуван от един файл.
Все още можете да стартирате публикувания файл, за да проверите дали работи правилно.