共有フレームワークに含まれる一部の Microsoft.Extensions パッケージ

アプリケーション のサイズを小さくし、パッケージの依存関係を簡略化し、サービスを効率化するために、.NET 11 には、基本共有フレームワークに 9 つの Microsoft.Extensions.* ライブラリが含まれています。 これらのパッケージを明示的に参照するプロジェクトは、ビルド警告 NU1510 を受け取ります。 警告を解決するには、 PackageReferenceを削除します。 これらのパッケージの古いバージョンに依存している場合は、.NET 11 バージョンにアップグレードすると、古いバージョンと .NET 11 の間で発生した破壊的変更が公開される可能性があります。

導入されたバージョン

.NET 11 Preview 4

以前の動作

以前は、次の Microsoft.Extensions.* ライブラリは、.NET共有フレームワークに含まれませんでした。 (共有フレームワークは、Sdk="Microsoft.NET.Sdk" を使用するか、同様に 他の .NET SDK のいずれかを参照することで利用できます。) それらを必要とするプロジェクトでは、明示的に PackageReference エントリを記述する必要があり、ビルド プロセスによってアセンブリが出力フォルダーにコピーされていました。

新しい動作

.NET 11 以降では、次の 9 つのライブラリが.NET基本共有フレームワークの一部です。

  • PackageReference 以降を対象とする場合、これらのライブラリにnet11.0は必要ありません。
  • これらのパッケージを明示的に参照すると、ビルド警告 NU1510 が表示されます
  • これらのアセンブリは、出力フォルダーにコピーされなくなります。
  • まれに、既定のロード セット内の追加の API によって名前または型の競合が発生する可能性があります。 競合を解決するには、より明示的な using ディレクティブを追加するか、エイリアスを使用するか、完全修飾型名を使用します。

破壊的変更の種類

この変更は 動作の変更です。

変更の理由

これらの一般的に使用されるライブラリを共有フレームワークに含めると、アプリケーション サイズが小さになり、パッケージの依存関係が簡略化され、サービスが合理化されます。

影響を受けるパッケージの PackageReference を削除します。

net11.0以降のみを対象とするプロジェクトの場合は、PackageReferenceを完全に削除します。

<!-- Remove entries like these from your .csproj when targeting net11.0 only: -->
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="..." />
<PackageReference Include="Microsoft.Extensions.Options" Version="..." />

コードは変更せずに引き続き機能します。API はランタイムの一部になりました。

マルチターゲット プロジェクト (たとえば、 <TargetFrameworks>net10.0;net11.0</TargetFrameworks>) の場合、NU1510 は発生しません。古い TFM ではパッケージが引き続き必要であるためです。 アクションは必要ありません。NuGet は、ターゲット フレームワークごとに適切なアセンブリを自動的に選択します。 明示的にする場合は、条件に基づいて参照を含めることができます。

<!-- Keep the reference only for TFMs that don't include it in the shared framework: -->
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="..." Condition="'$(TargetFramework)' != 'net11.0'" />

コンパイル時の名前の競合を解決する (まれ):

コード内の名前が新しく含まれる API の 1 つと競合するため、コンパイル エラーが発生した場合は、次のいずれかの方法を使用します。

  • より具体的な using ディレクティブを追加します。
  • usingエイリアスを使用します。
  • 完全修飾型名を使用します。

これらのパッケージの古いバージョンに依存している場合:

MissingMethodExceptionTypeLoadException などのランタイム エラーを回避するには、依存するライブラリまたはバイナリを.NET 11 の参照アセンブリに対して再コンパイルします。 net11.0をターゲットとする場合は、PackageReferenceを削除して再構築します。 以前の TFM またはマルチターゲットをターゲットとする場合は、net11.0 以外のターゲットのパッケージ参照を現在のバージョンに更新してから、再コンパイルします。

これらのパッケージの.NET 11 バージョンにアップグレードすると、以前のバージョンからの次の破壊的変更が発生する可能性があります。

Microsoft.Extensions.DependencyInjection.Abstractions

Microsoft.Extensions.Logging.Abstractions

Microsoft.Extensions.Hosting.Abstractions

影響を受ける API

なし。