次の方法で共有


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

dotnet publish コマンドでは、ターゲット フレームワークが .NET 8 以降のバージョンの場合、既定ではRelease構成ではなく、Debug構成が使用されるようになりました。

以前の動作

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

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

新しい動作

.NET 8 SDK 以降のバージョンで開発している場合、dotnet publishでは、ReleaseTargetFramework 以降のバージョンに設定されているプロジェクトに対して既定でnet8.0構成が使用されます。 Debugを出力パスにハードコーディングした CI/CD スクリプト、テスト、またはコードがある場合、この変更によってワークフローが中断される可能性があります。

プロジェクトが複数のバージョンを対象としている場合、新しい動作は、発行時に .NET 8 以降のターゲット フレームワークを指定した場合にのみ適用されます (たとえば、 dotnet publish -f net8.0を使用)。

ソリューション内のプロジェクトの場合:

  • dotnet publish では、ソリューション ファイルが指定されている場合、Visual Studio ソリューション内のすべてのプロジェクトを発行できます。 .NET 8 以降を対象とするソリューション プロジェクトの場合、 PublishRelease の値が未定義の場合は暗黙的に true に設定されます。 ただし、 dotnet publish がソリューションに使用する正しい構成を決定するには、ソリューション内のすべてのプロジェクトが PublishReleaseの値に同意する必要があります。 ソリューション内の古いプロジェクトでPublishReleasefalseに設定されている場合、新しい .NET 8 以降のプロジェクトでもプロパティをfalseに明示的に設定する必要があります。

  • この変更により、特に多くのプロジェクトを含むソリューションでは、 dotnet publish のパフォーマンスが低下する可能性があります。 これに対処するために、新しい環境変数 DOTNET_CLI_LAZY_PUBLISH_AND_PACK_RELEASE_FOR_SOLUTIONS が導入されました。

  • DOTNET_CLI_ENABLE_PUBLISH_RELEASE_FOR_SOLUTIONS環境変数が認識されなくなりました。

導入されたバージョン

.NET 8 Preview 1

破壊的変更の種類

この変更は ソースの互換性 に影響を与える可能性があり、 動作の変更でもあります。

変更の理由

発行するほとんどの場合、コードを最適化し、デバッグ情報を除外することでアプリを小さくすることができます。 お客様は、 Release を長い間 publish の既定の構成にすることを求めていました。 また、Visual Studio は長年にわたってこの動作を行ってきました。

有効にした動作が既定の動作になり、詳細な制御が不要になったため、 DOTNET_CLI_ENABLE_PUBLISH_RELEASE_FOR_SOLUTIONS 環境変数は削除されました。

  • 新しい動作を完全に無効にするには、 DOTNET_CLI_DISABLE_PUBLISH_AND_PACK_RELEASE 環境変数を true (またはその他の値) に設定します。 この変数は、 dotnet publishdotnet packの両方に影響します。

  • 発行のDebug構成を明示的に指定するには、-c--configuration または dotnet publish オプションを使用します。

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

  • ソリューションを発行していて破損している場合は、 PublishRelease を明示的に true に設定できます (または、 false して前の動作に戻すことができます)。

    <PropertyGroup>
      <PublishRelease>true</PublishRelease>
    </PropertyGroup>
    

    または、 Directory.Build.Props ファイルでプロパティを指定することもできます。 ただし、このファイル false 設定した場合でも、ソリューション内の .NET 8 以降のプロジェクトでプロパティを false するように明示的に設定する必要があります。 同様に、一部のプロジェクトで Directory.Build.Props ファイルの値とは異なる値を明示的に設定した場合、発行は失敗します。

  • ソリューションを発行していて、パフォーマンスが低下した場合は、 DOTNET_CLI_LAZY_PUBLISH_AND_PACK_RELEASE_FOR_SOLUTIONS 環境変数を true (またはその他の値) に設定して回帰を削除できます。 ただし、この変数を設定し、ソリューションに .NET 8 以降のプロジェクトと .NET 7 以前を対象とするプロジェクトが含まれている場合、すべてのプロジェクトで PublishReleaseが定義されるまで発行は失敗します。 この変数は、 dotnet publishdotnet packの両方に影響します。

こちらも参照ください