'dotnet publish' sürüm yapılandırmasını kullanır

Hedef dotnet publish çerçeve .NET 8 veya sonraki bir sürümse, komut varsayılan olarak yapılandırma yerine Debug yapılandırmayı kullanırRelease.

Önceki davranış

Daha önce, dotnet publish yapılandırma açıkça belirtilmediği veya PublishRelease olarak ayarlanmadığı sürece yapılandırmayı truekullanıyorduDebug.

özelliği PublishRelease bu hataya neden olan değişikliğe giden yol olarak .NET 7'ye eklendi. Daha önce, ortam değişkenini DOTNET_CLI_ENABLE_PUBLISH_RELEASE_FOR_SOLUTIONS Visual Studio çözümünün parçası olan bir projede kullanılacak PublishRelease şekilde ayarlayabilirsiniz.

Yeni davranış

.NET 8 SDK veya sonraki bir sürümle geliştiriyorsanız, dotnet publish veya daha sonraki bir sürüme net8.0 ayarlanmış projeler TargetFramework için varsayılan olarak yapılandırmayı kullanırRelease. Çıkış yoluna sabit kodladığınız Debug bir CI/CD betiğiniz, testleriniz veya kodunuz varsa, bu değişiklik iş akışınızı bozabilir.

Projeniz birden çok sürümü hedef alıyorsa, yeni davranış yalnızca yayımladığınızda .NET 8 veya üzeri bir hedef çerçeve belirtirseniz (örneğin, kullanarak dotnet publish -f net8.0) uygulanır.

Çözümdeki projeler için:

  • dotnet publish bir çözüm dosyası verilirse visual studio çözümündeki tüm projeleri yayımlayabilir. .NET 8 veya üzerini hedefleyen çözüm projeleri için değeri PublishRelease tanımlanmamışsa örtük olarak olarak ayarlanır true . Ancak, dotnet publish çözüm için kullanılacak doğru yapılandırmayı belirlemek için çözümdeki tüm projelerin değeri PublishReleaseüzerinde anlaşmaya varması gerekir. Çözümdeki PublishRelease eski bir proje olarak falseayarlandıysa, yeni .NET 8+ projeleri için de özelliğini false açıkça olarak ayarlamanız gerekir.

  • Bu değişiklik, özellikle çok sayıda proje içeren çözümler için performansının dotnet publish gerilemesi neden olabilir. Bu sorunu çözmek için yeni bir ortam değişkeni DOTNET_CLI_LAZY_PUBLISH_AND_PACK_RELEASE_FOR_SOLUTIONS kullanıma sunulmuştur.

  • Ortam DOTNET_CLI_ENABLE_PUBLISH_RELEASE_FOR_SOLUTIONS değişkeni artık tanınmıyor.

Sürüm kullanıma sunulmuştur

.NET 8 Preview 1

Hataya neden olan değişikliğin türü

Bu değişiklik kaynak uyumluluğunu etkileyebilir ve aynı zamanda davranışsal bir değişikliktir.

Değişiklik nedeni

Çoğu durumda yayımladığınızda kodunuzun iyileştirilmiş olmasını ve hata ayıklama bilgilerini dışlayarak uygulamayı daha küçük tutmanızı istersiniz. Müşteriler uzun süredir varsayılan yapılandırma publish olmasını istediRelease. Ayrıca, Visual Studio uzun yıllardır bu davranışa sahiptir.

Etkinleştirildiği DOTNET_CLI_ENABLE_PUBLISH_RELEASE_FOR_SOLUTIONS davranış artık varsayılan davranış olduğundan ve ayrıntılı denetim artık gerekli olmadığından ortam değişkeni kaldırıldı.

  • Yeni davranışı tamamen devre dışı bırakmak için ortam değişkenini DOTNET_CLI_DISABLE_PUBLISH_AND_PACK_RELEASEtrue (veya başka bir değer) olarak ayarlayabilirsiniz. Bu değişken hem hem dotnet packde dotnet publish 'yi etkiler.

  • Yayımlama yapılandırmasını açıkça belirtmek Debug için veya --configuration seçeneğini ile dotnet publishkullanın-c.

  • CI/CD işlem hattınız sabit kodlanmış çıkış yollarından dolayı bozuksa, ortam değişkenini kullanarak yeni ReleaseDebugdavranışı devre dışı bırakın veya yapılandırmanın DOTNET_CLI_DISABLE_PUBLISH_AND_PACK_RELEASEDebug kullanılması gerektiğini belirtin.

  • Bir çözüm yayımlıyorsanız ve çözüm bozuksa, açıkça olarak (veya false önceki davranışa geri dönmek için) olarak ayarlayabilirsiniz.PublishReleasetrue

    <PropertyGroup>
      <PublishRelease>true</PublishRelease>
    </PropertyGroup>
    

    Alternatif olarak, özelliğini bir Directory.Build.Props dosyasında belirtebilirsiniz. Ancak, bu dosyada ayarlarsanız false , çözümdeki .NET 8+ projelerinde özelliğini false açıkça ayarlamanız gerekir. Benzer şekilde, bazı projeler açıkça Directory.Build.Props dosyasındaki değerden farklı bir değer ayarlarsa yayımlama başarısız olur.

  • Bir çözüm yayımlıyorsanız ve performans gerilediyse, regresyonu kaldırmak için true ortam değişkenini (veya başka bir değer) olarak ayarlayabilirsinizDOTNET_CLI_LAZY_PUBLISH_AND_PACK_RELEASE_FOR_SOLUTIONS. Ancak, bu değişkeni ayarlarsanız ve çözümünüz bir .NET 8+ projesi ve .NET 7 veya önceki sürümleri hedefleyen bir proje içeriyorsa, tüm projeler tanımlayana PublishReleasekadar yayımlama başarısız olur. Bu değişken hem hem dotnet packde dotnet publish 'yi etkiler.

Ayrıca bkz.