ランタイム固有のアプリ、または RuntimeIdentifier
を持つ .NET アプリは、既定では 自己完結 型ではなくなりました。 代わりに、既定では フレームワークに依存 します。
これは、次の状況での破壊的変更です。
- アプリをデプロイ、配布、または発行したが、
SelfContained
プロパティを明示的に追加しなかったが、コンピューターに .NET ランタイムをインストールして動作させる必要もなかった場合。 この場合、既定で自己完結型アプリを生成するために、以前の動作に依存していた可能性があります。 - IL Link ツールに依存している場合。 この場合は、「IL Link を再度使用するための 推奨アクション 」で説明されている手順を実行します。
以前の動作
以前は、ランタイム識別子 (RID) が ( RuntimeIdentifier を使用して) 指定された場合、 SelfContained
が明示的に指定されていなくても、アプリは自己完結型として発行されていました。
さらに:
-
PublishSelfContained
が明示的にfalse
に設定されていない場合、発行プロパティPublishSingleFile
とPublishAot
はRuntimeIdentifier
を暗黙的に示します。その結果、SelfContained
、dotnet build
、dotnet restore
などの操作中にdotnet publish
が発生します (指定されていない場合)。 -
PublishTrimmed
プロパティはSelfContained
を意味しませんでした。 -
PublishReadyToRun
が指定されていない場合、SelfContained
プロパティは暗黙的にSelfContained
。
新しい動作
.NET 8 以降、.NET 8 以降のバージョンを対象とするアプリの場合、 RuntimeIdentifier
既定では SelfContained
を意味しなくなりました。 代わりに、ランタイム識別子を指定するアプリは、既定で .NET ランタイムに依存します (フレームワークに依存)。 .NET 7 以前のバージョンを対象とするアプリは影響を受けません。
さらに:
-
PublishSelfContained
が明示的にfalse
に設定されていない場合、発行プロパティPublishSingleFile
とPublishAot
は、SelfContained
中にのみdotnet publish
を意味します (つまり、dotnet build
やdotnet restore
ではありません)。 -
PublishTrimmed
プロパティは、SelfContained
中のdotnet publish
も意味するようになりました。 - プロジェクトが .NET 8 以降を対象とする場合、
PublishReadyToRun
プロパティはSelfContained
を意味しなくなりました。
注
msbuild /t:Publish
を使用して発行し、アプリを自己完結型にする場合は、プロジェクトに一覧表示されている発行プロパティのいずれかが含まれている場合でも、SelfContained
を明示的に指定する必要があります。
導入されたバージョン
.NET 8 Preview 5
破壊的変更の種類
この変更は、 ソースの互換性 と バイナリの互換性に影響する可能性があります。
変更の理由
- 新しい .NET SDK の動作は、Visual Studio の動作に合わせて調整されます。
- フレームワークに依存するアプリは、各アプリに格納されている .NET のコピーがないため、既定では小さくなります。
- .NET がアプリの外部で管理されている場合 (つまり、フレームワークに依存するデプロイの場合)、.NET のセキュリティが強化され、up-to-date が維持されます。 ランタイムの独自のコピーを持つアプリは、セキュリティ更新プログラムを取得しません。 この変更により、既定でフレームワークに依存するアプリが増えます。
- 理想的には、コマンド ライン オプションは互いに独立しています。 この場合、ツールは RID 固有の自己完結型展開 (SCD) と RID 固有のフレームワーク依存配置 (FDD) の両方をサポートします。 そのため、 RID が既定で FDD に設定されておらず、 RID が既定で SCD に設定されていないことは意味をなしませんでした。 この動作は、多くの場合、ユーザーにとって混乱を招くものでした。
.NET 6 では、次の警告が表示され、この破壊的変更がユーザーに警告されました。
警告 NETSDK1179: '--runtime ' を使用する場合は、''--self-contained' または '--no-self-contained' のいずれかのオプションが必要です。)
お客様が SelfContained
を明示的に追加する時間が得たので、中断を導入してもかまいません。
推奨されるアクション
.NET 7 以前のバージョンを使用していて、
SelfContained
が推論された以前の動作に依存している場合は、次の警告が表示されます。TargetFrameworks >= 8.0 のプロジェクトの場合、RuntimeIdentifier は SelfContained アプリを自動的に提供しなくなりました。 8.0 にアップグレードした後も .NET Framework 独立アプリの作成を続けるには、SelfContained を明示的に設定することを検討してください。
警告のガイダンスに従い、アプリを自己完結型として宣言します。 これは、 プロジェクト ファイル 内で行うか、コマンド ライン引数 (たとえば、
dotnet publish --self-contained
) として実行できます。.NET 8 を使用していて、前の動作を維持する場合は、
SelfContained
を前述と同じ方法でtrue
に設定します。
プロジェクト ファイルのプロパティを設定する
SelfContained
は、プロジェクト ファイルに挿入できる MSBuild プロパティです。これは、 拡張子が .csproj、 .vbproj、または .fsproj のファイルです。 プロパティを次のように設定します。
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
...
<SelfContained>true</SelfContained>
</PropertyGroup>
</Project>
こちらも参照ください
.NET