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