共用方式為


'dotnet pack' 使用 Release 組態

命令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_RELEASEtrue (或任何其他值)。 此變數會影響 dotnet publishdotnet 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_SOLUTIONStrue (或任何其他值)以移除回歸。 如果您使用這個變數和任何項目定義 PackRelease,則所有專案都必須定義它,或者您可以使用 Directory.Build.Props 檔案。 此變數會影響 dotnet publishdotnet pack

另請參閱