'dotnet pack' では Release 構成が使用される
コードを NuGet パッケージにパックする dotnet pack
コマンドでは、既定で Debug
構成ではなく Release
構成が使用されるようになりました。
以前の動作
以前は、構成が明示的に指定されているか、PackRelease
が true
に設定されていない限り、dotnet pack
では Debug
構成が使用されていました。
この破壊的変更へのパスとして、.NET 7 で PackRelease
プロパティが追加されました。 以前は、Visual Studio ソリューションに含まれているプロジェクトで PackRelease
を使用するように DOTNET_CLI_ENABLE_PACK_RELEASE_FOR_SOLUTIONS
環境変数を設定できました。
新しい動作
.NET 8 SDK 以降のバージョンで開発している場合、"すべての" プロジェクトに対して、dotnet pack
では既定で Release
構成が使用されます。 Debug
を出力パスにハードコーディングした CI/CD スクリプト、テスト、またはコードがある場合は、この変更によってワークフローが壊れる可能性があります。 また、Debug
構成が明示的に指定 (例: dotnet pack --configuration Debug
を使用) されていない限り、パックされたアプリをデバッグすることはできません。
dotnet pack
は、複数のターゲット フレームワーク モニカー (TFM) に対して同時にパックできます。 プロジェクトが複数のバージョンを対象とし、ターゲットごとに PackRelease
値が異なる場合は、ある TFM によって Release
構成がパックされ、他の TFM によって 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 パイプラインが壊れている場合は、パスを
Debug
ではなくRelease
に更新するか、DOTNET_CLI_DISABLE_PUBLISH_AND_PACK_RELEASE
環境変数を使用して新しい動作を無効にするか、またはDebug
構成を使用するように指定します。1 つ以上のプロジェクトで
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
の両方に影響を与えます。
関連項目
.NET