Aracılığıyla paylaş


'dotnet publish' Release yapılandırmasını kullanır

Varsayılan olarak, hedef çerçeve .NET 8 veya sonraki bir sürümse, dotnet publish komutuRelease yapılandırması yerine Debug yapılandırmasını kullanır.

Önceki davranış

Daha önce, dotnet publish, Debug yapılandırması kullanılmadıkça veya yapılandırma açıkça belirtilmediği sürece PublishRelease yapılandırmasını kullanıyordu.

özelliğiPublishRelease bu köklü değişikliğe yönelik bir çözüm olarak .NET 7'ye eklendi. Daha önce, DOTNET_CLI_ENABLE_PUBLISH_RELEASE_FOR_SOLUTIONS ortam değişkenini, Visual Studio çözümünün parçası olan bir projede PublishRelease kullanacak şekilde ayarlayabiliyordunuz.

Yeni davranış

.NET 8 SDK veya daha sonraki bir sürümüyle geliştiriyorsanız, dotnet publishRelease veya daha sonraki bir sürüme ayarlanmış projeler için TargetFramework yapılandırmasını varsayılan olarak net8.0 kullanır. Çı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 daha sonraki sürümleri hedefleyen çözüm projeleri için, PublishRelease değeri tanımlanmamışsa, örtük olarak true olarak ayarlanır. 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 false ayarlandıysa, yeni .NET 8+ projeleri için de özelliği açıkça false ayarlamanız gerekir.

  • Bu değişiklik, özellikle çok sayıda proje içeren çözümler için, dotnet publish'nin performansının gerileyebilmesine 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

Kesinti yaratan değişiklik 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 Release için varsayılan yapılandırma olarak publish'ın olmasını istiyor. 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 dotnet publish'ı hem de dotnet pack'i etkiler.

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

  • CI/CD işlem hattınız sabit kodlanmış çıkış yollarından dolayı bozuksa, yolları Release yerine Debug ile güncelleyin, DOTNET_CLI_DISABLE_PUBLISH_AND_PACK_RELEASE ortam değişkenini kullanarak yeni davranışı devre dışı bırakın veya Debug yapılandırmanın kullanılması gerektiğini belirtin.

  • Bir çözüm yayımlıyorsanız ve çözüm hatalıysa, PublishRelease öğesini açıkça olarak true öğesine ayarlayabilirsiniz (veya önceki davranışa geri dönmek için false öğesine ayarlayabilirsiniz).

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

    Alternatif olarak, özelliğini bir Directory.Build.Props dosyasında belirtebilirsiniz. Ancak, bu dosyada false özelliğini ayarlarsanız, çözümdeki .NET 8+ projelerinde de özelliği false olarak 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 DOTNET_CLI_LAZY_PUBLISH_AND_PACK_RELEASE_FOR_SOLUTIONS ortam değişkenini (veya başka bir değer) olarak ayarlayabilirsiniztrue. 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 dotnet publish'ı hem de dotnet pack'i etkiler.

Ayrıca bakınız