'dotnet publish' では Release 構成が使用される
ターゲット フレームワークが .NET 8 以降のバージョンの場合、dotnet publish
コマンドでは、既定で Debug
構成ではなく Release
構成が使用されるようになりました。
以前の動作
以前は、構成が明示的に指定されているか、PublishRelease
が true
に設定されていない限り、dotnet publish
では Debug
構成が使用されていました。
この破壊的変更へのパスとして、.NET 7 で PublishRelease
プロパティが追加されました。 以前は、Visual Studio ソリューションに含まれているプロジェクトで PublishRelease
を使用するように DOTNET_CLI_ENABLE_PUBLISH_RELEASE_FOR_SOLUTIONS
環境変数を設定できました。
新しい動作
.NET 8 SDK 以降のバージョンで開発している場合、TargetFramework
が net8.0
以降のバージョンに設定されているプロジェクトに対して、dotnet publish
では既定で Release
構成が使用されます。 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
破壊的変更の種類
この変更は、ソースの互換性に影響を与える可能性があり、動作の変更でもあります。
変更理由
発行時にはほとんどの場合、コードを最適化する必要があり、デバッグ情報を除外することでアプリを小さく保つことができます。 顧客は長年にわたり、publish
の既定の構成を Release
にすることを求めていました。 また、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 パイプラインが壊れている場合は、パスを
Debug
ではなくRelease
に更新するか、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