.NET uygulama yayımlamaya genel bakış

.NET ile oluştursanız uygulamalar iki farklı modda yayımlanır ve bu mod kullanıcının uygulamanızı çalıştırması üzerinde etkili olur.

Kendi içinde uygulama olarak yayımlamak. .NET çalışma zamanı ve kitaplıklarını, ayrıca uygulama ve bağımlılıklarını içeren bir uygulama üretir. Uygulamanın kullanıcıları uygulamayı .NET çalışma zamanı yüklü olmayan bir makinede çalıştırabilirsiniz.

Uygulamanızı çerçeveye bağımlı olarak yayımlamak, yalnızca uygulamanın kendisini ve bağımlılıklarını içeren bir uygulama üretir. Uygulama kullanıcılarının .NET çalışma zamanlarını ayrı olarak yüklemeleri gerekir.

Her iki yayımlama modu da varsayılan olarak platforma özgü bir yürütülebilir dosya üretir. Çerçeveye bağımlı uygulamalar yürütülebilir dosya olmadan oluşturulabilir ve bu uygulamalar platformlar arasıdır.

Yürütülebilir dosya üretilebiliyorsa, hedef platformu bir çalışma zamanı tanımlayıcısı (RID) ile belirtebilirsiniz. RID'ler hakkında daha fazla bilgi için bkz. .NET RID Kataloğu.

Aşağıdaki tabloda, sdk sürümü başına bir uygulamayı çerçeveye bağımlı veya kendi içinde olarak yayımlamak için kullanılan komutlar özetler:

Tür SDK 2.1 SDK 3.1 SDK 5.0 Komut
geçerli platform için çerçeveye bağımlı yürütülebilir dosya. ✔️ ✔️ dotnet publish
belirli bir platform için çerçeveye bağımlı yürütülebilir dosya. ✔️ ✔️ dotnet publish -r <RID> --self-contained false
çerçeveye bağımlı platformlar arası ikili. ✔️ ✔️ ✔️ dotnet publish
kendi içinde yürütülebilir . ✔️ ✔️ ✔️ dotnet publish -r <RID>

Daha fazla bilgi için bkz. .NET dotnet publish komutu.

Yürütülebilir dosya üretme

Yürütülebilir dosyalar platformlar arası değil. Bunlar bir işletim sistemine ve CPU mimarisine özeldir. Uygulamanızı yayımlarken ve yürütülebilir dosya oluştururken, uygulamayı kendi içinde veya çerçeveye bağımlı olarak yayımlayın. Bir uygulamayı kendi içinde yayımlamak uygulamayla birlikte .NET çalışma zamanı içerir ve uygulama kullanıcılarının uygulamayı çalıştırmadan önce .NET'i yükleme konusunda endişelenmesi gerek yoktur. Çerçeveye bağımlı olarak yayımlanan uygulamalar .NET çalışma zamanı ve kitaplıklarını içermez; yalnızca uygulama ve 3. taraf bağımlılıkları dahil edilir.

Aşağıdaki komutlar bir yürütülebilir dosya üretir:

Tür SDK 2.1 SDK 3.1 SDK 5.0 Komut
geçerli platform için çerçeveye bağımlı yürütülebilir dosya. ✔️ ✔️ dotnet publish
belirli bir platform için çerçeveye bağımlı yürütülebilir dosya. ✔️ ✔️ dotnet publish -r <RID> --self-contained false
kendi içinde yürütülebilir . ✔️ ✔️ ✔️ dotnet publish -r <RID>

Platformlar arası ikili dosya üretme

Platformlar arası ikili dosyalar, uygulamanızı bir dll dosyası şeklinde çerçeveye bağımlı olarak yayımlarsanız oluşturulur. Dll dosyası projenizin adıdır. Örneğin, word_reader adlı bir uygulamanız varsa, word_reader.dll oluşturulur. Bu şekilde yayımlanan uygulamalar komutuyla dotnet <filename.dll> lanır ve herhangi bir platformda çalıştırabilirsiniz.

Hedeflenen .NET çalışma zamanı zaten yüklü olduğu sürece platformlar arası ikili dosyalar herhangi bir işletim sisteminde çalışır. Hedeflenen .NET çalışma zamanı yüklü değilse, uygulama ileri sarmak üzere yapılandırılmışsa, uygulama daha yeni bir çalışma zamanı kullanılarak çalışır. Daha fazla bilgi için bkz. Çerçeveye bağımlı uygulamalar iletir.

Aşağıdaki komut platformlar arası ikili dosya üretir:

Tür SDK 2.1 SDK 3.x SDK 5.0 Komut
çerçeveye bağımlı platformlar arası ikili. ✔️ ✔️ ✔️ dotnet publish

Çerçeveye bağımlı yayımlama

Çerçeveye bağımlı olarak yayımlanan uygulamalar platformlar arasıdır ve .NET çalışma zamanı dahil değil. .NET çalışma zamanını yüklemek için uygulama kullanıcınız gereklidir.

Bir uygulamayı çerçeveye bağımlı olarak yayımlamak, dll dosyası olarak platformlar arası bir ikili dosya ve geçerli platformunu hedef alan platforma özgü bir yürütülebilir dosya oluşturur. Dll platformlar arası, yürütülebilir dosya ise platformlar arasıdır. Örneğin, word_reader ve hedef Windows adlı bir uygulama yayımlarsanız, word_reader.dllile birlikteword_reader.exe yürütülebilir dosyası oluşturulur. Linux veya macOS'u hedeflerken, word_reader ile birlikte bir word_reader.dll. RID'ler hakkında daha fazla bilgi için bkz. .NET RID Kataloğu.

Önemli

.NET SDK 2.1, uygulama çerçevesine bağımlı bir yayımlarsanız platforma özgü yürütülebilir dosyalar üretmez.

Uygulamanıza platformlar arası ikili dosya komutuyla dotnet <filename.dll> çalıştırabilirsiniz ve herhangi bir platformda çalıştırabilirsiniz. Uygulama platforma özgü NuGet bir paket kullanıyorsa, tüm platformların bağımlılıkları uygulamayla birlikte yayımlama klasörüne kopyalanır.

Parametreleri komutuna aktararak belirli bir platform için -r <RID> --self-contained false yürütülebilir dosya dotnet publish oluşturabilirsiniz. Parametresi -r atlanırsa, geçerli platform için yürütülebilir bir oluşturulur. Hedeflenen NuGet platform için platforma özgü bağımlılıklara sahip tüm platform paketleri yayımlama klasörüne kopyalanır. Platforma özgü bir yürütülebilir dosyaya ihtiyacınız yoksa proje <UseAppHost>False</UseAppHost> dosyasında belirtebilirsiniz. Daha fazla bilgi için bkz. .NET SDK MSBuild için başvuru.

Avantajlar

  • Küçük dağıtım
    Yalnızca sizin uygulamanız ve bağımlılıkları dağıtılır. .NET çalışma zamanı ve kitaplıkları kullanıcı tarafından yüklenir ve tüm uygulamalar çalışma zamanını paylaşır.

  • Platformlar arası
    Uygulamanız ve herhangi bir . NET tabanlı kitaplık diğer işletim sistemlerinde çalışır. Uygulamanıza yönelik bir hedef platform tanımlamanıza gerek yok. .NET dosya biçimi hakkında bilgi için bkz. .NET Derleme Dosyası Biçimi.

  • Düzeltme eki uygulamalı en son çalışma zamanlarını kullanır
    Uygulama, hedef sistemde yüklü olan en son çalışma zamanlarını (hedeflenen büyük-küçük .NET ailesi içinde) kullanır. Bu, uygulamanın otomatik olarak .NET çalışma zamanının en son düzeltme eki uygulama sürümünü kullandığı anlamına gelir. Bu varsayılan davranış geçersiz kılınabilir. Daha fazla bilgi için bkz. Çerçeveye bağımlı uygulamalar iletir.

Dezavantajlar

  • Çalışma zamanının önceden yüklemesini gerektirir
    Uygulamanız yalnızca uygulama hedeflerinin .NET sürümü konak sistemde zaten yüklüyse çalışmasına neden olabilir. Uygulamanın belirli bir .NET sürümünü gerektirmesi veya .NET'in daha yeni bir sürümüne izin vermesi için ileri sarma davranışını yapılandırabilirsiniz. Daha fazla bilgi için bkz. Çerçeveye bağımlı uygulamalar iletir.

  • .NET değişebilir
    Uygulamanın çalıştırıldı olduğu makinede .NET çalışma zamanı ve kitaplıkları güncelleştirilebilir. Nadir durumlarda, çoğu uygulamanın olduğu .NET kitaplıklarını kullanıyorsanız bu, uygulamanın davranışını değiştirebilir. Uygulamanın daha yeni .NET sürümlerini nasıl kullandığını yapılandırabilirsiniz. Daha fazla bilgi için bkz. Çerçeveye bağımlı uygulamalar iletir.

Aşağıdaki dezavantaj yalnızca .NET Core 2.1 SDK için geçerlidir.

  • Uygulamayı dotnet başlatmak için komutunu kullanın
    Kullanıcıların, uygulamayı başlatmak dotnet <filename.dll> için komutunu çalıştırması gerekir. .NET Core 2.1 SDK, çerçeveye bağımlı yayımlanan uygulamalar için platforma özgü yürütülebilir dosyalar üretmez.

Örnekler

Platformlar arası çerçeveye bağımlı bir uygulama yayımlama. Geçerli platformunu hedef alan yürütülebilir dosya dll dosyasıyla birlikte oluşturulur.

dotnet publish

Platformlar arası çerçeveye bağımlı bir uygulama yayımlama. Dll dosyasıyla birlikte bir Linux 64 bit yürütülebilir dosyası oluşturulur. Bu komut 2.1 .NET Core SDK çalışmıyor.

dotnet publish -r linux-x64 --self-contained false

Kendi içinde yayımlama

Kendi içinde olarak uygulama yayımlamak platforma özgü bir yürütülebilir dosya üretir. Çıktı yayımlama klasörü, .NET kitaplıkları ve hedef çalışma zamanı dahil olmak üzere uygulamanın tüm bileşenlerini içerir. Uygulama diğer .NET uygulamalardan yalıtılır ve yerel olarak yüklenmiş bir paylaşılan çalışma zamanı kullanmaz. .NET'i indirip yüklemek için uygulama kullanıcınıza gerek yoktur.

Yürütülebilir ikili dosya belirtilen hedef platform için üretiliyor. Örneğin, word_reader adlı bir uygulamanız varsa ve Windows için kendi içinde bir yürütülebilir dosya yayımlarsanız, word_reader.exe dosyası oluşturulur. Linux veya macOS için yayımlama, word_reader dosyası oluşturulur. Hedef platform ve mimari, komutu için -r <RID> parametresiyle dotnet publish belirtilir. RID'ler hakkında daha fazla bilgi için bkz. .NET RID Kataloğu.

Uygulamaya platforma özgü bağımlılıklar (platforma özgü bağımlılıklar içeren NuGet paketi gibi) varsa, bunlar uygulamayla birlikte yayımlama klasörüne kopyalanır.

Avantajlar

  • .NET sürümünü denetleme
    Uygulamanıza hangi .NET sürümünün dağıtılacağı sizin denetiminizdir.

  • Platforma özgü hedefleme
    Her platform için uygulama yayımlamanız gerek olduğundan, uygulamanın nerede çalıştırılamayacaklarını bilirsiniz. .NET yeni bir platform sunarsa, siz platformu hedef alan bir sürüm yayınlayana kadar kullanıcılar bu platformda uygulama çalıştıralamaz. Kullanıcılarınızı yeni platformda çalıştırmadan önce, uygulama uyumluluk sorunları için test edin.

Dezavantajlar

  • Daha büyük dağıtımlar
    Uygulamanız .NET çalışma zamanı ve tüm uygulama bağımlılıklarınızı içerir, çünkü gereken indirme boyutu ve sabit sürücü alanı, çerçeveye bağımlı bir sürümden büyüktür.

    İpucu

    .NET globalleştirme sabit modunu kullanarak Linux sistemlerinde dağıtım boyutunu yaklaşık 28 MB azaltabilirsiniz. Bu, tüm kültürlere sabit kültür gibi davranması için uygulamanıza güç sağlar.

    İpucu

    IL kırpması, dağıtım boyutunu daha da düşürebilirsiniz.

  • .NET sürümünü güncelleştirmek daha zor
    .NET Çalışma Zamanı (uygulamanıza dağıtılmıştır) yalnızca yeni bir sürümünün sürümü bırakıldığında yükseltilebilir. Ancak .NET, kritik güvenlik düzeltme eklerini, uygulamanın üzerinde çalıştırıldı olduğu makinede çerçeve kitaplığı için gereken şekilde güncelleştirecek. Bu güvenlik düzeltme eki senaryosu için sona doğru doğrulama sizin sorumluluğundadır.

Örnekler

Kendi içinde bir uygulama yayımlama. Bir macOS 64 bit yürütülebilir dosyası oluşturulur.

dotnet publish -r osx-x64

Kendi içinde bir uygulama yayımlama. 64 bit Windows bir yürütülebilir dosya oluşturulur.

dotnet publish -r win-x64

ReadyToRun görüntüleriyle yayımlama

ReadyToRun görüntüleriyle yayımlamak, uygulamanın boyutunu artırma maliyetiyle, uygulamanın başlangıç süresini iyiler. ReadyToRun ile yayımlamak için daha fazla ayrıntı için bkz. ReadyToRun.

Avantajlar

  • Geliştirilmiş başlangıç süresi
    Uygulama JIT'yi çalıştırmaya daha az zaman harcayacak.

Dezavantajlar

  • Daha büyük boyut
    Uygulama diskte daha büyük olur.

Örnekler

Kendi içinde ve ReadyToRun'da bir uygulama yayımlayın. Bir macOS 64 bit yürütülebilir dosyası oluşturulur.

dotnet publish -c Release -r osx-x64 -p:PublishReadyToRun=true

Kendi içinde ve ReadyToRun'da bir uygulama yayımlayın. 64 bit Windows bir yürütülebilir dosya oluşturulur.

dotnet publish -c Release -r win-x64 -p:PublishReadyToRun=true

Ayrıca bkz.