Публікування як окремого файлу без використання в одноразовому файлі

Сторінка оновлюється :
Дата створення сторінки :

Середовищі

Visual Studio
  • Visual Studio 2019
ASP.NET Core
  • 3,1

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

Окрім exe-файлу, вам часто знадобиться файл DLL для запуску програми. Ви будете поширювати кілька файлів і програм.

Тепер ви можете запустити всі файли в одному exe шляхом опублікування програми за допомогою функції "створити один файл" додано з .NET Core 3,0. (Файл PDB — це файл налагоджувальної інформації, тому його не потрібно розповсюджувати).

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

Підготовка до виведення з одного файлу

Як приклад, для завантаження файлу TextFile1. txt під час запуску слід використовувати таку конфігурацію проекту. TextFile1. txt призначений для розповсюдження з exe файл, так що зробити його "побудувати дію: 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>

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

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