'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ı true
kullanı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ğeriPublishRelease
tanımlanmamışsa örtük olarak olarak ayarlanırtrue
. Ancak,dotnet publish
çözüm için kullanılacak doğru yapılandırmayı belirlemek için çözümdeki tüm projelerin değeriPublishRelease
üzerinde anlaşmaya varması gerekir. ÇözümdekiPublishRelease
eski bir proje olarakfalse
ayarlandıysa, yeni .NET 8+ projeleri için de özelliğinifalse
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şkeniDOTNET_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ı.
Önerilen eylem
Yeni davranışı tamamen devre dışı bırakmak için ortam değişkenini
DOTNET_CLI_DISABLE_PUBLISH_AND_PACK_RELEASE
true
(veya başka bir değer) olarak ayarlayabilirsiniz. Bu değişken hem hemdotnet pack
dedotnet publish
'yi etkiler.Yayımlama yapılandırmasını açıkça belirtmek
Debug
için veya--configuration
seçeneğini iledotnet publish
kullanın-c
.CI/CD işlem hattınız sabit kodlanmış çıkış yollarından dolayı bozuksa, ortam değişkenini kullanarak yeni
Release
Debug
davranışı devre dışı bırakın veya yapılandırmanınDOTNET_CLI_DISABLE_PUBLISH_AND_PACK_RELEASE
Debug
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.PublishRelease
true
<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ğinifalse
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ımlayanaPublishRelease
kadar yayımlama başarısız olur. Bu değişken hem hemdotnet pack
dedotnet publish
'yi etkiler.