命令dotnet pack會將程式代碼封裝到 NuGet 套件中,現在預設會使用Release設定,而不是Debug設定。
先前的行為
先前,dotnet pack除非已明確指定組態或設定為 Debug,否則PackRelease會使用 true 組態。
屬性 PackRelease 已 新增至 .NET 7 中,以因應此重大變更。 先前,您可以將環境變數 DOTNET_CLI_ENABLE_PACK_RELEASE_FOR_SOLUTIONS 設定為在屬於 Visual Studio 解決方案的專案中使用 PackRelease。
新行為
如果您要使用 .NET 8 SDK 或更新版本進行開發,dotnet pack則預設會針對Release專案使用組態。 如果您有 CI/CD 腳本、測試或將 Debug 硬編碼到輸出路徑的程式碼,此變更可能會影響您的工作流程。 此外,除非已明確指定 Debug 組態,否則您將無法偵錯打包過的應用程式(例如,使用 dotnet pack --configuration Debug)。
dotnet pack 可以同時封裝多個目標架構標籤(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使用 。如果您的 CI/CD 管線因為硬式編碼的輸出路徑而中斷,請將路徑更新為
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。