.NET uygulama yayımlamaya genel bakış

.NET ile oluşturduğunuz uygulamalar iki farklı modda yayımlanabilir ve bu mod, bir kullanıcının uygulamanızı nasıl yürüttüğünde de etkili olur.

Uygulamanızı kendi içinde yayımlamak, .NET çalışma zamanı ve kitaplıklarını ve uygulamanızı ve onun bağımlılıklarını içeren bir uygulama oluşturur. Uygulamanın kullanıcıları bu uygulamayı .NET çalışma zamanı yüklü olmayan bir makinede çalıştırabilir.

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

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

Bir yürütülebilir dosya üretildiğinde, 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 Catalog.

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

Tür SDK 2.1 SDK 3,1 SDK 5,0 SDK 6,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 kendine içerilen çalıştırılabilir. ✔️ ✔️ ✔️ ✔️ dotnet publish -r <RID>

Daha fazla bilgi için bkz. .net DotNet Publish komutu.

Yürütülebilir bir dosya oluşturun

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

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

Tür SDK 2.1 SDK 3,1 SDK 5,0 SDK 6,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 kendine içerilen çalıştırılabilir. ✔️ ✔️ ✔️ ✔️ dotnet publish -r <RID>

Platformlar arası ikili oluşturun

Uygulamanızı, bir DLL dosyası biçiminde çerçeveye bağımlıolarak yayımladığınızda platformlar arası ikili dosyalar oluşturulur. DLL dosyası projenizden sonra adlandırılır. Örneğin, word_readeradlı bir uygulamanız varsa, word_reader.dll adlı bir dosya oluşturulur. Bu şekilde yayımlanan uygulamalar komutla çalışır dotnet <filename.dll> ve herhangi bir platformda çalıştırılabilir.

Platformlar arası ikili dosyalar, hedeflenen .NET çalışma zamanı zaten yüklü olduğu sürece herhangi bir işletim sisteminde çalıştırılabilir. Hedeflenen .NET çalışma zamanı yüklü değilse, uygulama geri almak üzere yapılandırıldıysa, uygulama daha yeni bir çalışma zamanı kullanılarak çalıştırılabilir. Daha fazla bilgi için bkz. çerçeveye bağımlı uygulamalar ileri alma.

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

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

Yayımla çerçevesi-bağımlı

Framework 'e bağımlı olarak yayımlanan uygulamalar platformlar arası ve .NET çalışma zamanı dahil değildir. Uygulamanızın kullanıcısı .NET çalışma zamanını yüklemek için gereklidir.

Bir uygulamayı Framework 'e bağımlı olarak yayımlamak, DLL dosyası olarak platformlar arası bir ikili dosya ve geçerli platformunuzu hedefleyen platforma özgü bir yürütülebilir dosya oluşturur. Yürütülebilir dosya olmadığından, DLL platformlar arası bir platformdur. örneğin, word_reader ve hedef Windows adlı bir uygulama yayımlarsanız, word_reader.dllbirlikte word_reader.exe çalıştırılabilir dosyası oluşturulur. Linux veya macOS hedeflenirken, word_reader.dllbirlikte word_reader çalıştırılabilir dosyası oluşturulur. RID 'Ler hakkında daha fazla bilgi için bkz. .net RID Catalog.

Önemli

.NET SDK 2,1, bir uygulama altyapısına bağımlı yayımladığınızda platforma özgü yürütülebilir dosyalar oluşturmaz.

Uygulamanızın platformlar arası ikili dosyası, komutla çalıştırılabilir dotnet <filename.dll> ve herhangi bir platformda çalıştırılabilir. uygulama platforma özgü uygulamalar içeren bir NuGet paketi kullanıyorsa, tüm platformların bağımlılıkları uygulamayla birlikte yayımlama klasörüne kopyalanır.

Parametreleri dotnet publish komuta geçirerek -r <RID> --self-contained false belirli bir platform için yürütülebilir bir dosya oluşturabilirsiniz. -rParametresi atlandığında, geçerli platformunuz için yürütülebilir bir dosya oluşturulur. hedeflenen platform için platforma özgü bağımlılıklara sahip tüm NuGet paketlerine yayımla klasörüne kopyalanır. Platforma özgü bir yürütülebilir dosya gerekmiyorsa proje dosyasında belirtebilirsiniz <UseAppHost>False</UseAppHost> . daha fazla bilgi için bkz. .net SDK projeleri için MSBuild başvurusu.

Avantajlar

  • Küçük dağıtım
    Yalnızca 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. AĞ tabanlı kitaplık diğer işletim sistemlerinde çalışır. Uygulamanız için bir hedef platform tanımlamanız gerekmez. .NET dosya biçimi hakkında daha fazla bilgi için bkz. .NET derleme dosyası biçimi.

  • En son düzeltme eki uygulanmış çalışma zamanını kullanır
    Uygulama, hedef sistemde yüklü olan en son çalışma zamanını (.NET 'in hedeflenen ana alt ailesi içinde) kullanır. Bu, uygulamanızın .NET çalışma zamanının en son düzeltme eki uygulanmış sürümünü otomatik olarak kullandığı anlamına gelir. Bu varsayılan davranış geçersiz kılınabilir. Daha fazla bilgi için bkz. çerçeveye bağımlı uygulamalar ileri alma.

Dezavantajlar

  • Çalışma zamanının önceden yüklenmesini gerektirir
    Uygulamanız yalnızca uygulama hedeflerinizin .NET sürümü konak sisteminde zaten yüklüyse çalıştırılabilir. Uygulama için, belirli bir .NET sürümü gerektiren veya daha yeni bir .NET sürümüne izin veren dağıtım iletme davranışını yapılandırabilirsiniz. Daha fazla bilgi için bkz. çerçeveye bağımlı uygulamalar ileri alma.

  • .NET değişebilir
    .NET çalışma zamanı ve kitaplıklarının uygulamanın çalıştırıldığı makinede güncellenmesi mümkündür. Nadir durumlarda, çoğu uygulamanın yapabileceği .NET kitaplıklarını kullanırsanız, bu durum uygulamanızın davranışını değiştirebilir. Uygulamanızın .NET 'in daha yeni sürümlerini nasıl kullandığını yapılandırabilirsiniz. Daha fazla bilgi için bkz. çerçeveye bağımlı uygulamalar ileri alma.

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

  • dotnetUygulamayı başlatmak için komutunu kullanın
    Kullanıcıların uygulamanızı başlatması için komutunu çalıştırmaları dotnet <filename.dll> gerekir. .NET Core 2,1 SDK, Framework 'e bağımlı olan uygulamalar için platforma özel yürütülebilir dosyalar üretmez.

Örnekler

Uygulama çoklu platform altyapısına bağımlı yayımlayın. Geçerli platformunuzu hedefleyen bir yürütülebilir dosya DLL dosyası ile birlikte oluşturulur.

dotnet publish

Uygulama çoklu platform altyapısına bağımlı yayımlayın. Linux 64 bit yürütülebilir dosyası, DLL dosyasıyla birlikte oluşturulur. Bu komut .NET Core SDK 2,1 ile çalışmıyor.

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

Kendi içinde Yayımla

Uygulamanızı kendi içinde yayımlamak platforma özgü bir yürütülebilir dosya oluşturur. Çıkış 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 uygulamalarından yalıtılmıştır ve yerel olarak yüklenmiş bir paylaşılan çalışma zamanı kullanmaz. Uygulamanızın kullanıcısı .NET indirmek ve yüklemek için gerekli değildir.

Yürütülebilir ikili dosya belirtilen hedef platform için üretildi. örneğin, word_readeradlı bir uygulamanız varsa ve Windows için kendi kendine dahil edilmiş bir yürütülebilir dosyayı yayımlarsanız, bir word_reader.exe dosyası oluşturulur. Linux veya macOS için yayımlama, bir word_reader dosyası oluşturulur. Hedef platform ve mimari, komut parametresiyle dotnet publish belirtilir -r <RID> . RID 'Ler hakkında daha fazla bilgi için bkz. .net RID Catalog.

uygulamanın platforma özgü bağımlılıklar içeren NuGet paketi gibi platforma özgü bağımlılıkları varsa, bunlar uygulamayla birlikte yayımla klasörüne kopyalanır.

Avantajlar

  • Denetim .NET sürümü
    Uygulamanız ile hangi .NET sürümünün dağıtıldığını kontrol edersiniz.

  • Platforma özgü hedefleme
    Uygulamanızı her platform için yayımlamanız gerektiğinden uygulamanızın nerede çalışacağını bilirsiniz. .NET yeni bir platform tanısa, bu platformu hedefleyen bir sürüm yayınlayana kadar kullanıcılar uygulamanızı bu platformda çalıştıramıyoruz. Kullanıcılarınızın uygulamanızı yeni platformda çalıştırmadan önce uyumluluk sorunları için uygulamanızı test edebilirsiniz.

Dezavantajlar

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

    İpucu

    Linux sistemlerinde dağıtımınızın boyutunu yaklaşık 28 MB ile, .NET Genelleştirme sabit modunukullanarak azaltabilirsiniz. Bu, uygulamanızı sabit kültürgibi tüm kültürleri işleyecek şekilde zorlar.

    İpucu

    Il kırpma , dağıtımınızın boyutunu daha da azaltabilir.

  • .NET sürümünü güncelleştirmek daha zordur
    .NET çalışma zamanı (uygulamanızla birlikte dağıtılır) yalnızca uygulamanızın yeni bir sürümü serbest bırakılarak yükseltilebilir. Ancak .NET, uygulamanızın üzerinde çalıştığı makinedeki çerçeve kitaplığı için gereken kritik güvenlik düzeltme eklerini güncelleştirir. Bu güvenlik düzeltme eki senaryosuna uçtan uca doğrulamadan sorumlusunuz.

Örnekler

Kendisini içeren bir uygulama yayımlayın. MacOS 64 bit yürütülebilir dosyası oluşturulur.

dotnet publish -r osx-x64

Kendisini içeren bir uygulama yayımlayın. Windows 64 bit yürütülebilir dosyası oluşturulur.

dotnet publish -r win-x64

ReadyToRun görüntüleriyle yayımlama

ReadyToRun görüntüleriyle yayımlama, uygulamanızın boyutunu artırma maliyetinde uygulamanızın başlama süresini iyileştirir. ReadyToRun ile yayımlamak için, daha fazla ayrıntı için bkz. readytorun .

Avantajlar

  • Geliştirilmiş başlangıç zamanı
    Uygulama JıT 'i çalıştırmaya daha az zaman harcaacaktır.

Dezavantajlar

  • Daha büyük boyut
    Uygulama diskte daha büyük olacaktır.

Örnekler

Kendisini içeren ve ReadyToRun uygulama yayımlayın. MacOS 64 bit yürütülebilir dosyası oluşturulur.

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

Kendisini içeren ve ReadyToRun uygulama yayımlayın. Windows 64 bit yürütülebilir dosyası oluşturulur.

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

Ayrıca bkz.