次の方法で共有


'dotnet pack' では Release 構成が使用される

コードを NuGet パッケージにパックする dotnet pack コマンドでは、既定でRelease構成ではなくDebug構成が使用されるようになりました。

以前の動作

以前dotnet pack、構成が明示的に指定されているか、DebugPackRelease に設定されていない限り、true構成を使用していました。

PackRelease プロパティは、この破壊的変更へのパスとして .NET 7 で追加されました。 以前は、Visual Studio ソリューションの一部であるプロジェクトでDOTNET_CLI_ENABLE_PACK_RELEASE_FOR_SOLUTIONSを使用するように、PackRelease環境変数を設定できました。

新しい動作

.NET 8 SDK 以降のバージョンで開発している場合、dotnet packReleaseプロジェクトに既定で構成を使用します。 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 publishdotnet packの両方に影響します。

  • パッキングのDebug構成を明示的に指定するには、-c--configuration または dotnet pack オプションを使用します。

  • ハードコーディングされた出力パスが原因で CI/CD パイプラインが破損している場合は、パスをReleaseではなくDebugに更新するか、DOTNET_CLI_DISABLE_PUBLISH_AND_PACK_RELEASE環境変数を使用して新しい動作を無効にするか、Debug構成を使用するように指定します。

  • ソリューションをパックする際に、1 つ以上のプロジェクトでPackReleaseの値が明示的に設定されているために破損する場合は、各プロジェクトでPackReleasefalseとして明示的に設定する必要があります。

    <PropertyGroup>
      <PackRelease>false</PackRelease>
    </PropertyGroup>
    
  • ソリューションをパッキングしていて、パフォーマンスが低下した場合は、 DOTNET_CLI_LAZY_PUBLISH_AND_PACK_RELEASE_FOR_SOLUTIONS 環境変数を true (またはその他の値) に設定して回帰を削除できます。 この変数を使用し、プロジェクトで PackReleaseを定義する場合は、すべてのプロジェクトで定義する必要があります。または、 Directory.Build.Props ファイルを 使用できます。 この変数は、 dotnet publishdotnet packの両方に影響します。

こちらも参照ください