dotnet publish
コマンドでは、ターゲット フレームワークが .NET 8 以降のバージョンの場合、既定ではRelease
構成ではなく、Debug
構成が使用されるようになりました。
以前の動作
以前dotnet publish
、構成が明示的に指定されているか、Debug
が PublishRelease
に設定されていない限り、true
構成を使用していました。
PublishRelease
プロパティは、この破壊的変更へのパスとして .NET 7 で追加されました。 以前は、Visual Studio ソリューションの一部であるプロジェクトでDOTNET_CLI_ENABLE_PUBLISH_RELEASE_FOR_SOLUTIONS
を使用するように、PublishRelease
環境変数を設定できました。
新しい動作
.NET 8 SDK 以降のバージョンで開発している場合、dotnet publish
では、Release
が TargetFramework
以降のバージョンに設定されているプロジェクトに対して既定でnet8.0
構成が使用されます。
Debug
を出力パスにハードコーディングした CI/CD スクリプト、テスト、またはコードがある場合、この変更によってワークフローが中断される可能性があります。
プロジェクトが複数のバージョンを対象としている場合、新しい動作は、発行時に .NET 8 以降のターゲット フレームワークを指定した場合にのみ適用されます (たとえば、 dotnet publish -f net8.0
を使用)。
ソリューション内のプロジェクトの場合:
dotnet publish
では、ソリューション ファイルが指定されている場合、Visual Studio ソリューション内のすべてのプロジェクトを発行できます。 .NET 8 以降を対象とするソリューション プロジェクトの場合、PublishRelease
の値が未定義の場合は暗黙的にtrue
に設定されます。 ただし、dotnet publish
がソリューションに使用する正しい構成を決定するには、ソリューション内のすべてのプロジェクトがPublishRelease
の値に同意する必要があります。 ソリューション内の古いプロジェクトでPublishRelease
がfalse
に設定されている場合、新しい .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 publish
とdotnet 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 publish
とdotnet pack
の両方に影響します。
こちらも参照ください
.NET