次の方法で共有


ランタイム固有のアプリが自己完結型ではなくなった

ランタイム固有のアプリ、または RuntimeIdentifierを持つ .NET アプリは、既定では 自己完結 型ではなくなりました。 代わりに、既定では フレームワークに依存 します。

これは、次の状況での破壊的変更です。

  • アプリをデプロイ、配布、または発行したが、 SelfContained プロパティを明示的に追加しなかったが、コンピューターに .NET ランタイムをインストールして動作させる必要もなかった場合。 この場合、既定で自己完結型アプリを生成するために、以前の動作に依存していた可能性があります。
  • IL Link ツールに依存している場合。 この場合は、「IL Link を再度使用するための 推奨アクション 」で説明されている手順を実行します。

以前の動作

以前は、ランタイム識別子 (RID) が ( RuntimeIdentifier を使用して) 指定された場合、 SelfContained が明示的に指定されていなくても、アプリは自己完結型として発行されていました。

さらに:

  • PublishSelfContainedが明示的にfalseに設定されていない場合、発行プロパティPublishSingleFilePublishAotRuntimeIdentifierを暗黙的に示します。その結果、SelfContaineddotnet builddotnet restoreなどの操作中にdotnet publishが発生します (指定されていない場合)。
  • PublishTrimmedプロパティはSelfContainedを意味しませんでした。
  • PublishReadyToRunが指定されていない場合、SelfContainedプロパティは暗黙的にSelfContained

新しい動作

.NET 8 以降、.NET 8 以降のバージョンを対象とするアプリの場合、 RuntimeIdentifier 既定では SelfContained を意味しなくなりました。 代わりに、ランタイム識別子を指定するアプリは、既定で .NET ランタイムに依存します (フレームワークに依存)。 .NET 7 以前のバージョンを対象とするアプリは影響を受けません。

さらに:

  • PublishSelfContainedが明示的にfalseに設定されていない場合、発行プロパティPublishSingleFilePublishAotは、SelfContained中にのみdotnet publishを意味します (つまり、dotnet builddotnet 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>

こちらも参照ください