Cara menerbitkan sebagai fail berasingan tanpa disertakan dalam fail yang dikendalikan tunggal

Laman dikemaskini :
Tarikh penciptaan halaman :

Persekitaran

Visual Studio
  • Visual Studio 2019
ASP.NET Core
  • 3.1

Apakah fail tunggal?

Sebagai tambahan kepada fail exe, anda sering memerlukan fail seperti dll untuk menjalankan program. Anda akan mengedarkan pelbagai fail dan atur cara.

Anda kini boleh menjalankan semua fail dalam satu exe dengan menerbitkan program menggunakan ciri "buat fail tunggal" ditambah dari .NET Core 3.0. (Fail PDB adalah fail maklumat nyahpepijat, jadi anda tidak perlu mengedarkannya.)

Walau bagaimanapun, dalam sesetengah kes, anda mungkin mahu meletakkan fail konfigurasi dalam folder dengan exe dan bukannya memasukkannya ke dalam exe. Seksyen ini menerangkan bagaimana untuk melakukan ini.

Bersedia untuk output fail tunggal

Sebagai contoh, konfigurasi projek berikut perlu digunakan untuk memuatkan fail TextFile1. txt pada permulaan. TextFile1. txt bertujuan untuk diedarkan dengan fail exe, jadi membuatnya "membina tindakan: tiada" dan "copy kepada direktori output: Salin ke baru jika baru." Kandungan TextFile1. txt boleh sewenang-wenangnya.

Anda boleh membina satu program dengan andaian bahawa anda mahu memuatkan fail yang diedarkan bersama-sama.

Walau bagaimanapun, fail boleh laku dalam satu fail sebenarnya dikembangkan ke folder sementara yang berasingan apabila ia dijalankan. Apabila anda memuatkan fail dalam laluan relatif, anda mesti menentukannya dalam folder di mana anda memulakan fail boleh laku, bukan dalam folder di mana fail boleh laku itu terletak.

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

Apabila anda menyahpepijat, anda boleh melihat bahawa fail itu dimuatkan.

TextFile1. txt juga dicetak dalam folder output kerana ia belum lagi disusun ke dalam satu fail.

Mari kita Terbitkan sebagai satu fail di negeri ini. Prosedur ini akan ditinggalkan kerana penerbitan tidak dimaksudkan.

Masa jalanan sasaran mestilah bukan mudah alih untuk menjadi satu fail.

Saya belum menetapkan apa-apa lagi, jadi ia satu fail seperti biasa.

Tiada TextFile1. txt apabila anda menjalankannya, jadi anda akan mendapat ralat.

Bagaimana untuk menerbitkan fail tertentu tanpa termasuk dalam satu fail

Buka fail projek (csproj) dalam Kod dengan fail yang anda tidak mahu masukkan dalam projek.

Saya fikir ia XML seperti ini: Cari fail yang hendak diubah pengesetan. Bergantung pada tetapan projek anda, anda mungkin tidak mempunyai fail sasaran, jadi anda mungkin perlu menambahnya secara manual.

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

Apabila anda menemui fail, tambah ExcludeFromSingleFile dengan true, seperti berikut: Seperti namanya, ia dikecualikan daripada satu fail.

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

Sila cuba Terbitkan selepas anda menyimpan. Anda boleh melihat bahawa ia diterbitkan daripada satu fail.

Anda masih boleh menjalankan fail yang diterbitkan untuk mengesahkan bahawa ia berfungsi dengan betul.