コードを NuGet パッケージにパックする dotnet pack
コマンドでは、既定でRelease
構成ではなくDebug
構成が使用されるようになりました。
以前の動作
以前dotnet pack
、構成が明示的に指定されているか、Debug
が PackRelease
に設定されていない限り、true
構成を使用していました。
PackRelease
プロパティは、この破壊的変更へのパスとして .NET 7 で追加されました。 以前は、Visual Studio ソリューションの一部であるプロジェクトでDOTNET_CLI_ENABLE_PACK_RELEASE_FOR_SOLUTIONS
を使用するように、PackRelease
環境変数を設定できました。
新しい動作
.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 パイプラインが破損している場合は、パスを
Release
ではなくDebug
に更新するか、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