Tek çalıştırlı bir dosyaya dahil edilmeden ayrı bir dosya olarak yayımlama

Sayfa güncel :
Sayfa oluşturma tarihi :

Ortam

Görsel Stüdyo
  • Visual Studio 2019
ASP.NET Çekirdek
  • 3.1

Tek bir dosya nedir?

Exe dosyasına ek olarak, genellikle bir programı çalıştırmak için dll gibi bir dosya gerekir. Birden çok dosya ve program dağıtacaksınız.

Artık programı .NET Core 3.0'dan eklenen "Tek Dosya Oluştur" özelliğini kullanarak yayınlayarak tüm dosyaları tek bir exe'de çalıştırabilirsiniz. (PDB dosyası hata ayıklama bilgi dosyasıdır, bu nedenle dağıtmanız gerekmez.)

Ancak, bazı durumlarda, bir yapılandırma dosyasını exe'ye dahil etmek yerine exe içeren bir klasöre yerleştirmek isteyebilirsiniz. Bu bölümde bunun nasıl yapılacağını açıklanmaktadır.

Tek dosya çıktısı için hazırlık

Örnek olarak, textfile1.txt dosyasını başlangıçta yüklemek için aşağıdaki proje yapılandırması kullanılmalıdır. TextFile1.txt exe dosyası ile dağıtılmak üzere tasarlanmıştır, bu nedenle "Yapı Eylem: Yok" ve "Çıkış Dizinine Kopyala: Yeniyse Kopyala." TextFile1.txt içeriği rasgele olabilir.

Birlikte dağıtılan dosyaları yüklemek istediğiniz varsayımıyla bir program oluşturabilirsiniz.

Ancak, tek bir dosyadaki yürütülebilir dosya çalıştırıldığında aslında ayrı bir geçici klasöre genişletilir. Bir dosyayı göreli bir yolda yüklediğinizde, dosyayı yürütülebilir dosyanın bulunduğu klasörde değil, çalıştırılabilir dosyayı başlattığınız klasörde belirtmeniz gerekir.

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

Hata ayıklama yaptığınızda, dosyanın yüklendiğini görebilirsiniz.

TextFile1.txt, henüz tek bir dosyada derlenmediği için çıktı klasöründe de yazdırılır.

Bu durumda tek bir dosya olarak yayınlayalım. Yayın amaçlanmadığından yordam atlanır.

Tek bir dosya olması için hedef çalışma süresitaşınabilir olmamalıdır.

Henüz bir şey ayarlamadım, bu yüzden her zamanki gibi bir dosya.

Çalıştırdığınızda TextFile1.txt yoktur, bu nedenle bir hata alırsınız.

Belirli bir dosyayı tek bir dosyaya dahil etmeden nasıl yayımlanır?

Projeye eklemek istemediğiniz dosyayla birlikte proje dosyasını (csproj) kod halinde açın.

Ben böyle xml olduğunu düşünüyorum: Ayarları değiştirmek istediğiniz dosyayı arayın. Proje ayarlarınıza bağlı olarak, hedef dosyanız olmayabilir, bu nedenle el ile eklemeniz gerekebilir.

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

Dosyayı bulduğunuzda, aşağıdaki gibi, doğru ile ExcludeFromSingleFile ekleyin: Adından da anlaşılacağı gibi, tek bir dosyanın dışında tutulur.

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

Lütfen bir kez kaydetmeyi deneyin. Tek bir dosya dışında yayımlandığını görebilirsiniz.

Doğru çalıştığını doğrulamak için yayımlanmış dosyayı çalıştırmaya devam edebilirsiniz.