自己完結型展開ランタイムのロール フォワード

.NET Core 自己完結型のアプリケーション展開には、.NET Core ライブラリと .NET Core ランタイムの両方が含まれます。 .NET Core 2.1 SDK (バージョン 2.1.300) 以降、自己完結型のアプリケーションのデプロイでは、お使いのコンピューター上にある最新の修正プログラムのランタイムを発行するようになりました。 既定では、自己完結型展開のための dotnet publish では、発行マシン上に SDK の一部としてインストールされている最新バージョンが選択されます。 これにより、展開したアプリケーションを publish 時に利用可能なセキュリティ修正プログラム (およびその他の修正) と共に実行できます。 新しい修正プログラムを取得するには、アプリケーションを再発行する必要があります。 dotnet publish コマンドで -r <RID> を指定するか、プロジェクト ファイル (csproj / vbproj) 内またはコマンド ライン上で -r <RID> を指定すると、自己完結型のアプリケーションが作成されます。

修正プログラムのバージョンのロール フォワードの概要

restorebuild および publish は、個別に実行できる dotnet コマンドです。 ランタイムの選択は、publishbuild ではなく、restore 操作の一部です。 publish を呼び出す場合、修正プログラムの最新バージョンが選択されます。 --no-restore 引数で publish を呼び出した場合、以前の restore はポリシーを発行する新しい自己完結型のアプリケーションで実行されていない可能性があるため、必要な修正プログラムのバージョンを取得しない可能性があります。 この場合、次のようなテキストでビルド エラーが生成されます。

"プロジェクトは Microsoft.NETCore.App バージョン 2.0.0 を使用して復元されましたが、代わりに最新の設定、バージョン 2.0.6 が使用されます。 この問題を解決するには、復元およびこれ以降の操作 (ビルドや発行など) で同じ設定を使用していることをご確認ください。 通常、この問題は、ビルドや発行の実行時に RuntimeIdentifier プロパティを設定したが、復元時には設定していない場合に発生することがあります。

注意

restorebuild は、publish などの別のコマンドの一部として暗黙的に実行できます。 別のコマンドの一部として暗黙的に実行すると、追加のコンテキストと共に提供されるため、適切な成果物が生成されます。 ランタイム (例: dotnet publish -r linux-x64) で publish を行う場合、暗黙的な restore では linux-x64 ランタイムのパッケージを復元します。 明示的に restore を呼び出す場合、そのコンテキストが含まれないため、既定でランタイム パッケージは復元されません。

発行時に復元を回避する方法

publish 操作の一部として restore を実行することは、お客様のシナリオにとって望ましくない場合があります。 自己完結型のアプリケーションを作成しているときの publish 時に restore を回避するには、次の操作を行います。

  • RuntimeIdentifiers プロパティに、発行されるすべての RuntimeIdentifiers をセミコロンで区切って設定します。
  • TargetLatestRuntimePatch プロパティを true に設定します。

dotnet publish オプションでの no-restore 引数

同じプロジェクト ファイルで自己完結型のアプリケーションとフレームワークに依存するアプリケーションの両方を作成する場合、dotnet publish 引数を使用する場合は、次のいずれかを選択します。

  1. フレームワークに依存する動作を優先します。 アプリケーションがフレームワークに依存する場合、これが既定の動作になります。 アプリケーションが自己完結型で、修正プログラムが適用されていない 2.1.0 のローカル ランタイムを使用できる場合、プロジェクト ファイルで TargetLatestRuntimePatchfalse に設定します。

  2. 自己完結型の動作を優先します。 アプリケーションが自己完結型の場合、これが既定の動作になります。 アプリケーションがフレームワークに依存し、最新の修正プログラムがインストールされている必要がある場合、プロジェクト ファイルで TargetLatestRuntimePatchtrue に設定します。

  3. プロジェクト ファイルで RuntimeFrameworkVersion に特定の修正プログラムのバージョンを設定して、ランタイム フレームワークのバージョンの明示的なコントロールを取得します。