Aracılığıyla paylaş


.NET uygulaması yayımlamaya genel bakış

Bu makalede bir .NET uygulaması yayımlamanın farklı yolları açıklanmaktadır. Yayımlama modlarını, yürütülebilir dosyaların ve platformlar arası ikili dosyaların nasıl üretildiğini ve her yaklaşımın dağıtım ve çalışma zamanı ortamları üzerindeki etkisini kapsar. .NET CLI veya Visual Studio kullanarak .NET uygulamaları yayımlayabilirsiniz.

Yayımlama hakkında kısa bir öğretici için bkz . Öğretici: Visual Studio Code kullanarak .NET konsol uygulaması yayımlama.

Yayımlama hakkında kısa bir öğretici için bkz . Öğretici: Visual Studio kullanarak .NET konsol uygulaması yayımlama.

Yayımlama nedir?

.NET uygulaması yayımlamak, kaynak kodu derleyerek dağıtım için bir yürütülebilir dosya veya ikili dosyası, bağımlılıkları ve ilgili dosyaları oluşturmak anlamına gelir. Yayımladıktan sonra uygulamayı bir sunucuya, dağıtım platformuna, kapsayıcıya veya bulut ortamına dağıtırsınız. Yayımlama işlemi bir uygulamayı dağıtıma hazırlar ve geliştirme ortamının dışında kullanır.

Yayımlama modları

Bir uygulamayı yayımlamanın iki birincil yolu vardır. Bu kararı etkileyen bazı faktörler, dağıtım ortamında uygun .NET Çalışma Zamanı'nın yüklü olup olmadığı ve çalışma zamanını uygulamanızla paketlemeyi gerektiren belirli derleme özelliklerine ihtiyacınız olup olmadığıdır. İki yayımlama modu şunlardır:

  • Bağımsız yayımlama
    Bu mod, uygulamayı başlatmak için kullanılan platforma özgü yürütülebilir dosyayı, uygulama kodunu içeren derlenmiş ikili dosyayı, uygulama bağımlılıklarını ve uygulamayı çalıştırmak için gereken .NET çalışma zamanını içeren bir yayımlama klasörü oluşturur. Uygulamayı çalıştıran ortamda .NET çalışma zamanının önceden yüklenmiş olması gerekmez.

  • Çerçeveye bağımlı yayımlama
    Bu mod, uygulamayı başlatmak için kullanılan isteğe bağlı platforma özgü yürütülebilir dosyayı, uygulama kodunu içeren derlenmiş ikili dosyayı ve uygulama bağımlılıklarını içeren bir yayımlama klasörü oluşturur. Uygulamayı çalıştıran ortamda uygulamanın kullanabileceği bir .NET çalışma zamanı sürümü yüklü olmalıdır.

Önemli

Hedef platformu çalışma zamanı tanımlayıcısı (RID) ile belirtirsiniz. RID'ler hakkında daha fazla bilgi için bkz. .NET RID Kataloğu.

Yayımlamayla ilgili temel bilgiler

<TargetFramework> Proje dosyasının ayarı, uygulamanızı yayımladığınızda varsayılan hedef çerçeveyi belirtir. Hedef çerçeveyi geçerli herhangi bir Hedef Çerçeve Takma Adı (TFM) ile değiştirebilirsiniz. Örneğin, projeniz kullanıyorsa <TargetFramework>net9.0</TargetFramework>.NET 9'ı hedefleyen bir ikili oluşturulur.

Birden fazla çerçeveyi hedeflemek istiyorsanız, ayarı noktalı virgülle ayırarak birden çok TFM değerine ayarlayabilirsiniz <TargetFrameworks> . Uygulamanızı oluşturduğunuzda, uygulamanız projeniz tarafından tanımlanan her hedef çerçeve için oluşturulur. Ancak, uygulamanızı yayımladığınızda hedef çerçeveyi belirtmeniz gerekir:

Varsayılan derleme yapılandırma modu, parametresiyle değiştirilmediği sürece Yayın'dır-c.

dotnet publish -c Release -f net9.0

Komutun dotnet publish varsayılan çıkış dizinidir ./bin/<BUILD-CONFIGURATION>/<TFM>/publish/. Örneğin, dotnet publish -c Release -f net9.0 için ./bin/Release/net9.0/publish/yayımlar. Ancak, tüm derleme çıkışları için basitleştirilmiş bir çıkış yolu ve klasör yapısı seçebilirsiniz. Daha fazla bilgi için bkz . Yapıt çıktı düzeni.

Visual Studio'da her hedef çerçeve için ayrı yayımlama profilleri oluşturun.

Taşınabilir ikili dosyalar

Bir .NET uygulaması yayımladığınızda, belirli bir platformu hedefleyebilir veya taşınabilir bir ikili dosya oluşturabilirsiniz. Varsayılan olarak, taşınabilir ikili dosya oluştururken bile .NET, bu davranışı açıkça devre dışı bırakmadığınız sürece taşınabilir DLL ile birlikte platforma özgü bir yürütülebilir dosya ("apphost") yayımlar.

Platforma özgü yürütülebilir dosya, varsayılan olarak UseAppHostolarak olan özelliği nedeniyle true oluşturulur. Platforma özgü yürütülebilir dosya olmadan yalnızca taşınabilir DLL'yi yayımlamak içinUseAppHost, komut satırında (false) veya -p:UseAppHost=false olarak olarak ayarlayın.

Belirli bir platformu hedeflemenin avantajı, uygulamanızın gerektirebileceği yerel bağımlılıkları işleyerek hedef platformun belirli gereksinimleriyle uyumluluğu sağlamasıdır.

Yerel bağımlılıklar

Uygulamanızın yerel bağımlılıkları varsa, taşınabilir ikili olarak yayımlanırsa farklı bir işletim sisteminde çalışmayabilir. Örneğin, Windows API'sine bağımlı uygulamalar macOS veya Linux üzerinde yerel olarak çalışmaz. Platforma özgü kod sağlamanız ve her platform için bir yürütülebilir dosya derlemeniz gerekir.

Başvurmuş olduğunuz bir kitaplık platforma özgü bağımlılıklar sağlıyorsa uygulamanız her platformda çalışmayabilir. Ancak, belirli bir platformu yayımladığınızda ve hedeflediğinizde, NuGet paketinin platforma özgü bağımlılıkları yayımlama klasörüne kopyalanır.

Uygulamanızın yerel bağımlılıklarıyla yayımlandığından emin olmak için belirli bir platformda yayımlayın:

dotnet publish -c Release -r <RID>
  • -c Release

    Bu anahtar, derleme yapılandırmasını Yayın olarak ayarlar ve üretim dağıtımı için en iyi duruma getirilmiştir.

  • -r <RID>

    Bu anahtar, hedef platformu belirtmek için bir çalışma zamanı tanımlayıcısı (RID) kullanır ve yerel bağımlılıkların dahil edilmesini sağlar (gerekirse). Çalışma zamanı tanımlayıcılarının listesi için bkz . Çalışma Zamanı Tanımlayıcısı (RID) kataloğu.

  1. Çözüm Gezgini'nde projeye sağ tıklayın ve Yayımla'yı seçin.
  2. İlk kez yayımlıyorsanız yayımlama hedefi olarak Klasör'e tıklayın ve İleri'ye tıklayın.
  3. Bir klasör konumu seçin veya varsayılanı kabul edin, ardından Son'u seçin.
  4. Yayımlama profilinde Tüm ayarları göster'i seçin.
  5. Hedef Çalışma Zamanı'nı istediğiniz platforma ayarlayın (örneğin, 64 bit Windows için win-x64).
  6. Kaydet'i ve ardından Yayımla'yı seçin.

Çalışma zamanı tanımlayıcılarının listesi için bkz . Çalışma Zamanı Tanımlayıcısı (RID) kataloğu.

Hızlı referans

Aşağıdaki tabloda uygulamanızı yayımlamaya yönelik hızlı örnekler verilmiştir.

Yayımlama Modu Komut
Çerçeveye bağımlı dağıtım dotnet publish -c Release [-r <RID>]
Çerçeveye bağımlı dağıtım (DLL) dotnet publish -c Release -p:UseAppHost=false
Bağımsız dağıtım dotnet publish -c Release [-r <RID>] --self-contained true
Tek dosyalı dağıtım dotnet publish -c Release [-r <RID>] -p:PublishSingleFile=true
Yerel AOT dağıtımı dotnet publish -c Release [-r <RID>] -p:PublishAot=true
ReadyToRun dağıtımı dotnet publish -c Release [-r <RID>] -p:PublishReadyToRun=true
Kapsayıcı dağıtımı dotnet publish -c Release [-r <RID>] -t:PublishContainer

Çerçeveye bağımlı dağıtım

CLI veya Visual Studio'dan yayımladığınızda çerçeveye bağımlı dağıtım varsayılan moddur. Bu modda, uygulamanızı başlatmak için kullanılabilecek platforma özgü bir yürütülebilir dosya oluşturulur. Platforma özgü yürütülebilir dosya, Windows'da myapp.exe veya diğer platformlarda sadece myapp olarak isimlendirilir.

Uygulamanız belirli bir .NET sürümünü hedeflemek üzere yapılandırılmıştır. Hedeflenen .NET çalışma zamanının uygulamanızın çalıştığı ortamda olması gerekir. Örneğin, uygulamanız .NET 9'u hedef alıyorsa, uygulamanızın üzerinde çalıştığı herhangi bir ortamda .NET 9 çalışma zamanı yüklü olmalıdır.

Çerçeveye bağımlı dağıtım yayımlamak, uygulamayı çalıştıran ortamda kullanılabilen en son .NET güvenlik düzeltme ekine otomatik olarak iletilen bir uygulama oluşturur. Derleme zamanında sürüm bağlama hakkında daha fazla bilgi için bkz. Kullanılacak .NET sürümünü seçme.

Avantaj -ları

  • Küçük dağıtım: Yalnızca uygulama ve bağımlılıkları dağıtılır. Uygulamanın çalıştırıldığı ortamda .NET çalışma zamanı zaten yüklü olmalıdır.
  • Platformlar arası: Uygulama ve herhangi bir . NET tabanlı kitaplık diğer işletim sistemlerinde çalışır.
  • En son düzeltme eki uygulama çalışma zamanını kullanır: Uygulama, ortamda yüklü olan en son çalışma zamanını kullanır.

Dezavantaj -ları

  • Çalışma zamanının önceden yüklenmesini gerektirir: Uygulama yalnızca hedeflediğini .NET sürümü ortamda zaten yüklüyse çalıştırılabilir.
  • .NET değişebilir: Uygulamanın çalıştırıldığı ortam daha yeni bir .NET çalışma zamanı kullanabilir ve bu da uygulama davranışını değiştirebilir.

Çerçeveye bağımlı uygulamaları başlatma

Çerçeveye bağımlı uygulamaları çalıştırmanın iki yolu vardır: platforma özgü yürütülebilir dosya ("apphost") ve dotnet myapp.dll aracılığıyla. Apphost yürütülebilir dosyasını doğrudan çalıştırabilir ve dotnet myapp.dll çağırmak yerine hâlâ kabul edilebilir bir şekilde uygulamayı çalıştırabilirsiniz. Mümkün olduğunda apphost'un kullanılması önerilir. apphost kullanmanın çeşitli avantajları vardır:

  • Yürütülebilir dosyalar standart yerel platform yürütülebilir dosyaları gibi görünür.
  • Yürütülebilir adlar işlem adlarında korunur, yani uygulamalar adlarına göre kolayca tanınabilir.
  • apphost yerel bir ikili olduğundan, bildirimler gibi yerel varlıklar bunlara eklenebilir.
  • Apphost' un, daha güvenli olmasını sağlayan varsayılan olarak uygulanan düşük düzeyli güvenlik azaltmaları vardır. Örneğin, Denetim Akışı Zorlama Teknolojisi (CET) gölge yığını .NET 9'dan başlayarak varsayılan olarak etkindir. için uygulanan dotnet azaltmalar, desteklenen tüm çalışma zamanlarının en düşük ortak paydasıdır.

Yayınlamak

dotnet publish -c Release [-r <RID>]
  • -c Release

    Bu anahtar, derleme yapılandırmasını Yayın olarak ayarlar ve üretim dağıtımı için en iyi duruma getirilmiştir.

  • -r <RID>

    Bu anahtar, hedef platformu belirtmek için bir çalışma zamanı tanımlayıcısı (RID) kullanır ve yerel bağımlılıkların dahil edilmesini sağlar (gerekirse). Çalışma zamanı tanımlayıcılarının listesi için bkz . Çalışma Zamanı Tanımlayıcısı (RID) kataloğu.

Veya açıkça:

dotnet publish -c Release [-r <RID>] --self-contained false
  • --self-contained false

    Bu anahtar, .NET SDK'sına çerçeveye bağımlı bir dağıtım oluşturmasını açıkça bildirir.

  1. Çözüm Gezgini'nde projeye sağ tıklayın ve Yayımla'yı seçin.
  2. İlk kez yayımlıyorsanız yayımlama hedefi olarak Klasör'e tıklayın ve İleri'ye tıklayın.
  3. Bir klasör konumu seçin veya varsayılanı kabul edin, ardından Son'u seçin.
  4. Yayımlama profilinde Tüm ayarları göster'i seçin.
  5. Dağıtım Modu'nuÇerçeveye bağımlı olarak ayarlayın (varsayılan ayar budur).
  6. Hedef Çalışma Zamanı'nı istediğiniz platforma ayarlayın (örneğin, 64 bit Windows için win-x64).
  7. Kaydet'i ve ardından Yayımla'yı seçin.

.NET yükleme arama davranışını yapılandırma

Apphost varsayılan olarak platforma göre değişen yükleme konumlarına sahip genel olarak yüklenmiş bir .NET çalışma zamanını bulur ve kullanır. Çalışma zamanı bulma ve yükleme konumları hakkında daha fazla bilgi için bkz. Uygulama başlatma hatalarını giderme.

.NET çalışma zamanı yolu, her yürütme için de özelleştirilebilir. Ortam DOTNET_ROOT değişkeni özel konumu işaret etmek için kullanılabilir. Tüm DOTNET_ROOT yapılandırma seçenekleri hakkında daha fazla bilgi için bkz. .NET ortam değişkenleri.

Genel olarak, en iyi kullanım DOTNET_ROOT yöntemi şunları yapmaktır:

  1. Önce DOTNET_ROOT ortam değişkenlerini temizleyin, yani DOTNET_ROOT metniyle başlayan tüm ortam değişkenlerini.
  2. Yalnızca DOTNET_ROOT ve DOTNET_ROOT hedef yola ayarlayın.
  3. Hedef apphost'u çalıştır.

.NET 9 ve sonraki sürümlerinde, yayımlanan yürütülebilir dosyanın .NET yükleme arama yollarını ve AppHostDotNetSearch özellikleri aracılığıyla AppHostRelativeDotNet yapılandırabilirsiniz.

AppHostDotNetSearch yürütülebilir dosyanın bir .NET yüklemesini arayacağı bir veya daha fazla konumun belirtilmesine izin verir:

  • AppLocal: uygulama yürütülebilir dosyasının klasörü
  • AppRelative: uygulama yürütülebilir dosyasıyla ilgili yol
  • EnvironmentVariable: ortam değişkenlerinin DOTNET_ROOT[_<arch>] değeri
  • Global: kayıtlı ve varsayılan genel yükleme konumları

AppHostRelativeDotNet , içerdiğinde AppHostDotNetSearchAppRelativearanacak yürütülebilir dosyaya göre yolu belirtir.

Daha fazla bilgi için bkz AppHostDotNetSearch. , AppHostRelativeDotNetve apphost'ta konum seçeneklerini yükleme.

Platformlar arası DLL dağıtımı

Alternatif olarak, uygulamanızı platforma özgü yürütülebilir dosya olmadan platformlar arası DLL olarak yayımlayabilirsiniz. Bu modda, yayımlama çıktı klasöründe bir myapp.dll dosya oluşturulur. Uygulamanızı çalıştırmak için çıkış klasörüne gidin ve komutunu kullanın dotnet myapp.dll .

Platformlar arası DLL olarak yayımlamak için:

dotnet publish -c Release -p:UseAppHost=false
  • -c Release

    Bu anahtar, derleme yapılandırmasını Yayın olarak ayarlar ve üretim dağıtımı için en iyi duruma getirilmiştir.

  • -p:UseAppHost=false

    Bu özellik, platforma özgü yürütülebilir dosyanın oluşturulmasını devre dışı bırakır ve yalnızca taşınabilir DLL'yi üretir.

  1. Çözüm Gezgini'nde projeye sağ tıklayın ve Yayımla'yı seçin.
  2. İlk kez yayımlıyorsanız yayımlama hedefi olarak Klasör'e tıklayın ve İleri'ye tıklayın.
  3. Bir klasör konumu seçin veya varsayılanı kabul edin, ardından Son'u seçin.
  4. Yayımlama profilinde Tüm ayarları göster'i seçin.
  5. Dağıtım Modu'nuÇerçeveye bağımlı olarak ayarlayın.
  6. Tek dosya üret'in işaretini kaldırın.
  7. Hedef Çalışma Zamanı'nıTaşınabilir olarak ayarlayın (veya boş bırakın).
  8. Kaydet'i ve ardından Yayımla'yı seçin.

Bağımsız dağıtım

Bağımsız bir dağıtım (SCD) yayımladığınızda, yayımlama işlemi platforma özgü bir yürütülebilir dosya oluşturur. SCD yayımlama, uygulamanızı çalıştırmak için gerekli tüm .NET dosyalarını içerir, ancak .NET'in yerel bağımlılıklarını içermez. Uygulama çalışmadan önce bu bağımlılıkların ortamda mevcut olması gerekir.

SCD yayımlamak, kullanılabilir en son .NET güvenlik düzeltme ekine iletmeyen bir uygulama oluşturur. Derleme zamanında sürüm bağlama hakkında daha fazla bilgi için bkz. Kullanılacak .NET sürümünü seçme.

Avantaj -ları

  • .NET sürümünü denetleme: Uygulamayla dağıtılan .NET sürümünü denetleyin.
  • Platforma özgü hedefleme: Uygulamanın her platform için yayımlanması gerektiğinden, uygulamanın nerede çalıştığı açıktır.

Dezavantaj -ları

  • Daha büyük dağıtımlar: Uygulama .NET çalışma zamanını ve tüm bağımlılıkları içerdiğinden, gereken indirme boyutu ve sabit sürücü alanı çerçeveye bağımlı bir dağıtımdan daha büyüktür.
  • .NET sürümünü güncelleştirmek daha zor: .NET Çalışma Zamanı yalnızca uygulamanın yeni bir sürümü yayınlanarak yükseltilebilir.

Bahşiş

Kırpılmış olarak yayımlayarak veya genelleştirme sabit modunu etkinleştirerek uyumlu kendi içinde bulunan uygulamaların toplam boyutunu azaltabilirsiniz. Genelleştirme sabit modu hakkında daha fazla bilgi için bkz. .NET Genelleştirme Sabit Modu.

Yayınlamak

dotnet publish -c Release -r <RID> --self-contained true
  • -c Release

    Bu anahtar, derleme yapılandırmasını Yayın olarak ayarlar ve üretim dağıtımı için en iyi duruma getirilmiştir.

  • -r <RID>

    Bu anahtar, hedef platformu belirtmek için bir çalışma zamanı tanımlayıcısı (RID) kullanır ve yerel bağımlılıkların dahil edilmesini sağlar (gerekirse). Çalışma zamanı tanımlayıcılarının listesi için bkz . Çalışma Zamanı Tanımlayıcısı (RID) kataloğu.

  • --self-contained true

    Bu anahtar, .NET SDK'sına kendi içinde dağıtım (SCD) olarak yürütülebilir dosya oluşturmasını söyler.

  1. Çözüm Gezgini'nde projeye sağ tıklayın ve Yayımla'yı seçin.
  2. İlk kez yayımlıyorsanız yayımlama hedefi olarak Klasör'e tıklayın ve İleri'ye tıklayın.
  3. Bir klasör konumu seçin veya varsayılanı kabul edin, ardından Son'u seçin.
  4. Yayımlama profilinde Tüm ayarları göster'i seçin.
  5. Dağıtım Modu'nuBağımsız olarak ayarlayın.
  6. Hedef Çalışma Zamanı'nı istediğiniz platforma ayarlayın (örneğin, 64 bit Windows için win-x64).
  7. Kaydet'i ve ardından Yayımla'yı seçin.

Tek dosyalı dağıtım

Uygulamanızı tek dosyalı dağıtım olarak yayımladığınızda, uygulamaya bağımlı tüm dosyalar tek bir ikili dosyada paketlenir. Bu dağıtım modeli hem çerçeveye bağımlı hem de bağımsız uygulamalar için kullanılabilir ve uygulamanızı tek bir dosya olarak dağıtmak ve dağıtmak için cazip bir seçenek sunar.

Tek dosyalı uygulamalar her zaman işletim sistemine ve mimariye özeldir. Linux x64, Linux Arm64, Windows x64 gibi her yapılandırma için yayımlamanız gerekir.

Avantaj -ları

  • Basitleştirilmiş dağıtım: Uygulamanızı tek bir yürütülebilir dosya olarak dağıtın ve dağıtın.
  • Azaltılmış dosya dağınıklığı: Tüm bağımlılıklar paketlenir ve birden çok dosyayı yönetme gereksinimi ortadan kaldırılır.
  • Kolay dağıtım: Uygulamayı dağıtmak için tek bir dosya kopyalayın.

Dezavantaj -ları

  • Daha büyük dosya boyutu: Tek dosya tüm bağımlılıkları içerir ve tek tek dosyalardan daha büyük hale getirir.
  • Daha yavaş başlatma: Dosyaların çalışma zamanında ayıklanması gerekir ve bu da başlangıç performansını etkileyebilir.
  • Platforma özgü: Her hedef platform için ayrı dosyalar yayımlamanız gerekir.

Tek dosyalı dağıtım, daha fazla iyileştirme için kırpma ve ReadyToRun derlemesi gibi diğer iyileştirmelerle birleştirilebilir.

Tek dosyalı dağıtım hakkında daha fazla bilgi için bkz. Tek dosyalı dağıtım.

Yayınlamak

dotnet publish -c Release -r <RID> -p:PublishSingleFile=true
  • -c Release

    Bu anahtar, derleme yapılandırmasını Yayın olarak ayarlar ve üretim dağıtımı için en iyi duruma getirilmiştir.

  • -r <RID>

    Bu anahtar, hedef platformu belirtmek için bir çalışma zamanı tanımlayıcısı (RID) kullanır ve yerel bağımlılıkların dahil edilmesini sağlar (gerekirse). Çalışma zamanı tanımlayıcılarının listesi için bkz . Çalışma Zamanı Tanımlayıcısı (RID) kataloğu.

  • -p:PublishSingleFile=true

    Bu özellik, uygulamaya bağımlı tüm dosyaları tek bir ikili dosyada paketler.

  1. Çözüm Gezgini'nde projeye sağ tıklayın ve Yayımla'yı seçin.
  2. İlk kez yayımlıyorsanız yayımlama hedefi olarak Klasör'e tıklayın ve İleri'ye tıklayın.
  3. Bir klasör konumu seçin veya varsayılanı kabul edin, ardından Son'u seçin.
  4. Yayımlama profilinde Tüm ayarları göster'i seçin.
  5. Dağıtım Modu'nuBağımsız veya Çerçeveye bağımlı olarak ayarlayın.
  6. Hedef Çalışma Zamanı'nı istediğiniz platforma ayarlayın (örneğin, 64 bit Windows için win-x64).
  7. Tek dosya üret'i işaretleyin.
  8. Kaydet'i ve ardından Yayımla'yı seçin.

Yerel AOT dağıtımı

Yerel AOT dağıtımı uygulamanızı doğrudan yerel koda derleyerek çalışma zamanı gereksinimini ortadan kaldırır. Derlenen yerel kodun uygulamayı çalıştırmak için gereken her şeyi içermesi gerektiğinden bu yayımlama seçeneği bağımsız dağıtım modunu kullanır. Bu, daha hızlı başlangıç sürelerine ve daha az bellek kullanımına neden olur, ancak desteklenen özelliklerle ilgili bazı sınırlamalarla birlikte gelir.

Avantaj -ları

  • Hızlı başlatma: Çalışma zamanında JIT derlemesi gerekmez ve bu da uygulamanın daha hızlı başlatılmasına neden olur.
  • Daha az bellek kullanımı: Geleneksel .NET uygulamalarına kıyasla daha düşük bellek ayak izi.
  • Çalışma zamanı bağımlılığı yok: Uygulama .NET çalışma zamanı yüklemesi gerektirmeden çalışır.
  • Daha küçük dağıtım boyutu: Tam çalışma zamanı ile genellikle bağımsız dağıtımdan daha küçüktür.

Dezavantaj -ları

  • Sınırlı çerçeve desteği: Tüm .NET özellikleri ve kitaplıkları Yerel AOT ile uyumlu değildir.
  • Daha uzun derleme süreleri: Yerel koda derleme, normal derlemelerden daha uzun sürer.
  • Platforma özgü: Her hedef platform ve mimari için ayrı ayrı derlenmelidir.
  • Hata ayıklama sınırlamaları: Normal .NET uygulamalarına kıyasla daha karmaşık hata ayıklama deneyimi.

Yerel AOT dağıtımı hakkında daha fazla bilgi için bkz. Yerel AOT dağıtımı.

Yayınlamak

dotnet publish -c Release -r <RID> -p:PublishAot=true
  • -c Release

    Bu anahtar, derleme yapılandırmasını Yayın olarak ayarlar ve üretim dağıtımı için en iyi duruma getirilmiştir.

  • -r <RID>

    Bu anahtar, hedef platformu belirtmek için bir çalışma zamanı tanımlayıcısı (RID) kullanır ve yerel bağımlılıkların dahil edilmesini sağlar (gerekirse). Çalışma zamanı tanımlayıcılarının listesi için bkz . Çalışma Zamanı Tanımlayıcısı (RID) kataloğu.

  • -p:PublishAot=true

    Bu özellik, uygulamayı doğrudan yerel koda derleyen Yerel AOT derlemesini etkinleştirir.

Proje dosyasında yerel AOT yayımlama yapılandırılmalıdır. Visual Studio yayımlama kullanıcı arabirimi aracılığıyla etkinleştiremezsiniz.

  1. Çözüm Gezgini'nde projenize sağ tıklayın ve Proje Dosyasını Düzenle'yi seçin.

  2. Aşağıdaki özelliği bir <PropertyGroup>içine ekleyin:

    <PublishAot>true</PublishAot>
    
  3. Proje dosyasını kaydedin.

  4. Çözüm Gezgini'nde projeye sağ tıklayın ve Yayımla'yı seçin.

  5. İlk kez yayımlıyorsanız yayımlama hedefi olarak Klasör'e tıklayın ve İleri'ye tıklayın.

  6. Bir klasör konumu seçin veya varsayılanı kabul edin, ardından Son'u seçin.

  7. Yayımlama profilinde Tüm ayarları göster'i seçin.

  8. Dağıtım Modu'nuBağımsız olarak ayarlayın.

  9. Hedef Çalışma Zamanı'nı istediğiniz platforma ayarlayın (örneğin, 64 bit Windows için win-x64).

  10. Kaydet'i ve ardından Yayımla'yı seçin.

Yerel AOT dağıtımı hakkında daha fazla bilgi için bkz. Yerel AOT dağıtımı.

ReadyToRun dağıtımı

Uygulamanızı ReadyToRun derlemesi ile yayımladığınızda, uygulama derlemeleriniz ReadyToRun (R2R) biçiminde derlenir. R2R, tam zamanında (JIT) derleyicinin uygulamanızı yüklerken yapması gereken iş miktarını azaltarak başlangıç performansını geliştiren bir önceden (AOT) derleme biçimidir. Bu yayımlama seçeneği hem çerçeveye bağımlı hem de bağımsız dağıtım modlarıyla kullanılabilir.

ReadyToRun ikili dosyaları hem ara dil (IL) kodunu hem de aynı kodun yerel sürümünü içerir. R2R ikili dosyaları normal derlemelerden daha büyük olsa da, daha iyi başlangıç performansı sağlar.

Avantaj -ları

  • Geliştirilmiş başlangıç süresi: Uygulama, başlatma sırasında JIT derleyicisini çalıştırmak için daha az zaman harcar.
  • Daha iyi ilk kullanım performansı: Kod yollarının ilk kez yürütülmesi için daha düşük gecikme süresi.
  • Mevcut kodla uyumlu: Çoğu .NET kitaplığı ve çerçevesiyle değişiklik yapmadan çalışır.
  • Esnek dağıtım: Hem çerçeveye bağımlı dağıtım hem de bağımsız dağıtım modlarıyla birleştirilebilir.

Dezavantaj -ları

  • Daha büyük boyut: Hem IL hem de yerel kod dahil olduğundan uygulama diskte daha büyüktür.
  • Derleme süreleri daha uzun: Derleme, standart yayımlamadan daha uzun sürer.
  • Platforma özgü iyileştirmeler: En iyi performans kazanımları için belirli platformların hedeflenmesi gerekir.

Yayınlamak

dotnet publish -c Release -r <RID> -p:PublishReadyToRun=true
  • -c Release

    Bu anahtar, derleme yapılandırmasını Yayın olarak ayarlar ve üretim dağıtımı için en iyi duruma getirilmiştir.

  • -r <RID>

    Bu anahtar, hedef platformu belirtmek için bir çalışma zamanı tanımlayıcısı (RID) kullanır ve yerel bağımlılıkların dahil edilmesini sağlar (gerekirse). Çalışma zamanı tanımlayıcılarının listesi için bkz . Çalışma Zamanı Tanımlayıcısı (RID) kataloğu.

  • -p:PublishReadyToRun=true

    Bu özellik, derlemeleri önceden derleyerek başlangıç performansını geliştiren ReadyToRun derlemesini etkinleştirir.

  1. Çözüm Gezgini'nde projeye sağ tıklayın ve Yayımla'yı seçin.
  2. İlk kez yayımlıyorsanız yayımlama hedefi olarak Klasör'e tıklayın ve İleri'ye tıklayın.
  3. Bir klasör konumu seçin veya varsayılanı kabul edin, ardından Son'u seçin.
  4. Yayımlama profilinde Tüm ayarları göster'i seçin.
  5. Dağıtım Modu'nuBağımsız veya Çerçeveye bağımlı olarak ayarlayın.
  6. Hedef Çalışma Zamanı'nı istediğiniz platforma ayarlayın (örneğin, 64 bit Windows için win-x64).
  7. ReadyToRun derlemesini etkinleştir'i işaretleyin.
  8. Kaydet'i ve ardından Yayımla'yı seçin.

ReadyToRun dağıtımı hakkında daha fazla bilgi için bkz . ReadyToRun derlemesi.

Kapsayıcı dağıtımı

Uygulamanızı kapsayıcı olarak yayımladığınızda ,NET SDK'sı uygulamanızı ve bağımlılıklarını ayrı bir Dockerfile gerekmeden kapsayıcı görüntüsünde paketler. Bu dağıtım modu, Docker veya Podman gibi herhangi bir kapsayıcı çalışma zamanında çalıştırılabilir eksiksiz bir kapsayıcı görüntüsü oluşturur. Kapsayıcı dağıtımı, en iyi duruma getirilmiş temel görüntüler sağlarken Dockerfiles yazma ve bakımını yapma gereksinimini ortadan kaldırarak kapsayıcıya alma işlemini basitleştirir.

.NET SDK 8.0.200'den başlayarak kapsayıcı desteği varsayılan olarak eklenir ve ek NuGet paketleri gerektirmez. Konsol uygulamaları için, özelliğini EnableSdkContainerSupportolarak ayarlayarak true kapsayıcı desteğini açıkça etkinleştirmeniz gerekebilir.

Bahşiş

Kapsayıcılarla ilgili proje ayarları hakkında daha fazla bilgi için bkz. .NET uygulama başvurularını kapsayıcıya alma.

Avantaj -ları

  • Basitleştirilmiş kapsayıcılama: Temel senaryolar için Dockerfile yazmanız veya bakımını yapmanız gerekmez.
  • İyileştirilmiş temel görüntüler: En son güvenlik güncelleştirmeleriyle Microsoft tarafından sağlanan, iyileştirilmiş temel görüntüleri kullanır.
  • Tutarlı ortam: Geliştirme, test ve üretim genelinde tutarlı çalışma zamanı ortamı sağlar.
  • Kolay dağıtım: Kapsayıcı görüntüleri farklı ortamlarda kolayca paylaşılabilir ve dağıtılabilir.
  • Platform yalıtımı: Uygulamalar yalıtılmış kapsayıcılarda çalıştırılarak uygulamalar arasındaki çakışmalar azaltılır.

Dezavantaj -ları

  • Kapsayıcı çalışma zamanı bağımlılığı: Hedef ortamda bir kapsayıcı çalışma zamanı yüklü olmalıdır.
  • Görüntü boyutu: Kapsayıcı görüntüleri genellikle diğer dağıtım yöntemlerinden daha büyüktür.
  • Öğrenme eğrisi: Kapsayıcı kavramlarının ve araçlarının anlaşılmasını gerektirir.
  • Sınırlı özelleştirme: Karmaşık senaryolar için özel Dockerfile'lara kıyasla daha az esneklik.

Yayınlamak

dotnet publish -c Release [-r <RID>] /t:PublishContainer
  • -c Release

    Bu anahtar, derleme yapılandırmasını Yayın olarak ayarlar ve üretim dağıtımı için en iyi duruma getirilmiştir.

  • -r <RID>

    Bu anahtar, hedef platformu belirtmek için bir çalışma zamanı tanımlayıcısı (RID) kullanır ve yerel bağımlılıkların dahil edilmesini sağlar (gerekirse). Çalışma zamanı tanımlayıcılarının listesi için bkz . Çalışma Zamanı Tanımlayıcısı (RID) kataloğu.

  • -t:PublishContainer

    Bu hedef, uygulamayı kapsayıcı görüntüsü olarak yayımlar.

Ayrıca yayımlama profili yaklaşımını da kullanabilirsiniz:

dotnet publish -c Release [-r <RID>] -p:PublishProfile=DefaultContainer
  • -p:PublishProfile=DefaultContainer

    Bu profil kapsayıcı yayımlama işlemini tetikler.

  1. Çözüm Gezgini'nde projeye sağ tıklayın ve Yayımla'yı seçin.
  2. Yayımlama hedefi olarak Container Registry'yi ve ardından İleri'yi seçin.
  3. Hedef kapsayıcı kayıt defterinizi ( Azure Container Registry, Docker Hub veya Genel Kayıt Defteri gibi) seçin ve İleri'yi seçin.
  4. Kayıt defteri bağlantı ayrıntılarını ve kimlik doğrulamasını yapılandırın.
  5. Yayımlama profilinde Tüm ayarları göster'i seçin.
  6. Dağıtım Modu'nu gereksinimlerinize göre Bağımsız veya Çerçeveye bağımlı olarak ayarlayın.
  7. Hedef Çalışma Zamanı'nı istediğiniz platforma ayarlayın (örneğin, Linux kapsayıcıları için linux-x64).
  8. Görüntü adı ve etiketler gibi kapsayıcıya özgü ayarları yapılandırın.
  9. Kaydet'i ve ardından Yayımla'yı seçin.

Kapsayıcı dağıtımı hakkında daha fazla bilgi için bkz. .NET SDK kapsayıcı oluşturmaya genel bakış.

Ayrıca bkz.