Cara mempublikasikan sebagai file terpisah tanpa disertakan dalam file yang dijalankan tunggal

Halaman Diperbarui :
Tanggal pembuatan halaman :

Lingkungan

Studio visual
  • Visual Studio 2019
ASP.NET inti
  • 3,1

Apa yang dimaksud dengan satu file?

Selain file exe, Anda akan sering memerlukan file seperti dll untuk menjalankan program. Anda akan mendistribusikan beberapa file dan program.

Anda sekarang dapat menjalankan semua file dalam satu exe dengan menerbitkan program menggunakan fitur "Buat Single file" ditambahkan dari .NET Core 3,0. (PDB file adalah file informasi debug, sehingga Anda tidak perlu mendistribusikannya.)

Namun, dalam beberapa kasus, Anda mungkin ingin menempatkan file konfigurasi dalam folder dengan exe bukan termasuk dalam exe. Bagian ini menjelaskan cara melakukannya.

Mempersiapkan untuk single-file output

Sebagai contoh, konfigurasi proyek berikut ini harus digunakan untuk memuat TextFile1. txt file pada startup. TextFile1. txt dimaksudkan untuk didistribusikan dengan file exe, jadi Buatlah "Build Action: none" dan "copy to output direktori: salin ke baru jika baru." Isi dari TextFile1. txt bisa sewenang-wenang.

Anda dapat membangun sebuah program dengan asumsi bahwa Anda ingin memuat file yang didistribusikan bersama-sama.

Namun, berkas yang dapat dijalankan dalam satu berkas sebenarnya diperluas ke folder sementara yang terpisah saat dijalankan. Ketika Anda memuat berkas di lintasan relatif, Anda harus menentukan di folder di mana Anda memulai berkas yang dapat dijalankan, bukan di folder di mana berkas executable 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();
    }
  }
}

Ketika Anda debug, Anda dapat melihat bahwa berkas dimuat.

TextFile1. txt juga dicetak di folder output karena belum dikompilasi ke dalam satu file.

Mari kita publikasikan sebagai satu file dalam keadaan ini. Prosedur ini dihilangkan karena publikasi tidak dimaksudkan.

Target runtime harus non-portabel menjadi satu file.

Aku belum mengatur apa pun, jadi satu file seperti biasa.

Tidak ada TextFile1. txt ketika Anda menjalankannya, sehingga Anda akan mendapatkan error.

Cara mempublikasikan file tertentu tanpa termasuk dalam satu file

Buka berkas proyek (csproj) kode dengan berkas yang tidak ingin disertakan dalam proyek.

Saya pikir itu XML seperti ini: Cari file yang ingin Anda ubah setelannya. Tergantung pada pengaturan proyek Anda, Anda mungkin tidak memiliki file target, sehingga Anda mungkin perlu menambahkannya 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>

Ketika Anda menemukan berkas, tambahkan Excludefromsinglefile dengan benar, sebagai berikut: Seperti namanya, itu dikecualikan dari satu file.

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

Silakan mencoba untuk mempublikasikan setelah Anda telah disimpan. Anda dapat melihat bahwa itu diterbitkan dari satu file.

Anda masih dapat menjalankan berkas yang diterbitkan untuk memverifikasi bahwa itu bekerja dengan benar.