'dotnet pack' 使用 Release 設定
dotnet pack
命令會將程式碼封裝到 NuGet 套件中,現在預設會使用 Release
設定,而非 Debug
設定。
先前的行為
除非先前已明確指定組態,或 PackRelease
已設定為 true
,否則 dotnet pack
會使用 Debug
組態。
PackRelease
屬性 已加入 .NET 7,作為此重大變更的途徑。 您之前可以將 DOTNET_CLI_ENABLE_PACK_RELEASE_FOR_SOLUTIONS
環境變數設定為在屬於 Visual Studio 解決方案的專案中,使用 PackRelease
。
新的行為
如果您要使用 .NET 8 SDK 或更新版本進行開發,則 dotnet pack
預設會針對所有Release
專案使用 設定。 如果您有已將 Debug
硬式編碼至輸出路徑的 CI/CD 指令碼、測試或程式碼,此變更可能會中斷您的工作流程。 此外,除非明確指定 (例如使用 dotnet pack --configuration Debug
) Debug
設定,否則您無法偵錯已封裝的應用程式。
dotnet pack
可以同時封裝多個目標 Framework Moniker (TFM)。 如果您的專案以多個版本為目標,且針對不同目標有不同的 PackRelease
值,則可能會發生衝突,其中有些 TFM 會封裝 Release
設定,而其他則會封裝 Debug
設定。
對於解決方案中的專案:
如果提供解決方案檔案,
dotnet pack
可以在 Visual Studio 解決方案中封裝所有專案。 對於方案中的每個專案,如果未定義,則會隱含地將PackRelease
的值設定為true
。 為了讓dotnet pack
判斷要使用的正確設定,解決方案中的所有專案都必須同意其PackRelease
值。這項變更可能會導致
dotnet pack
的效能下降,尤其是包含許多專案的解決方案。 為了解決此問題,已引入新的環境變數DOTNET_CLI_LAZY_PUBLISH_AND_PACK_RELEASE_FOR_SOLUTIONS
。無法再辨識
DOTNET_CLI_ENABLE_PACK_RELEASE_FOR_SOLUTIONS
環境變數。
導入的版本
.NET 8 Preview 1
中斷性變更的類型
變更原因
在大部分情況下,當您建立封裝時,您想要最佳化程式碼,且可以透過排除偵錯資訊,讓封裝保持較小。
已移除 DOTNET_CLI_ENABLE_PACK_RELEASE_FOR_SOLUTIONS
環境變數,因為其啟用的行為現在是預設行為,而且不再需要細微的控制項。
建議的動作
若要完全停用新行為,您可以將
DOTNET_CLI_DISABLE_PUBLISH_AND_PACK_RELEASE
環境變數設定為true
(或任何其他值)。 此變數會影響dotnet publish
和dotnet pack
。若要明確指定封裝的
Debug
設定,請使用-c
或--configuration
選項搭配dotnet pack
。如果您的持續整合與持續傳遞管線因為硬式編碼的輸出路徑而中斷,請將路徑更新為
Release
而非Debug
、使用DOTNET_CLI_DISABLE_PUBLISH_AND_PACK_RELEASE
環境變數停用新的行為,或指定應該使用Debug
設定。如果您要封裝解決方案,且因為一或多個專案明確設定
PackRelease
的值而中斷,則應該在每個專案中將PackRelease
明確設定為false
:<PropertyGroup> <PackRelease>false</PackRelease> </PropertyGroup>
如果您要封裝解決方案,且效能已迴歸,則可以將
DOTNET_CLI_LAZY_PUBLISH_AND_PACK_RELEASE_FOR_SOLUTIONS
環境變數設定為true
(或任何其他值) 以移除迴歸。 如果您使用此變數和任何專案定義PackRelease
,則所有專案都必須予以定義,或者,您可以使用 Directory.Build.Props 檔案。 此變數會影響dotnet publish
和dotnet pack
。