Как да публикувате като отделен файл, без да се включвате в едно изпълняван файл

Страницата се актуализира :
Дата на създаване на страница :

Околната среда

Визуално студио
  • Изглед от 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>

Опитайте се да публикувате, след като сте записали. Можете да видите, че е публикуван от един файл.

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