アプリケーション のサイズを小さくし、パッケージの依存関係を簡略化し、サービスを効率化するために、.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 エントリを記述する必要があり、ビルド プロセスによってアセンブリが出力フォルダーにコピーされていました。
- Microsoft.Extensions.Caching.Abstractions
- Microsoft.Extensions.Configuration.Abstractions
- Microsoft.Extensions.DependencyInjection.Abstractions
- Microsoft.Extensions.Diagnostics.Abstractions
- Microsoft.Extensions.FileProviders.Abstractions
- Microsoft.Extensions.Hosting.Abstractions
- Microsoft.Extensions.Logging.Abstractions
- Microsoft.Extensions.Options
- Microsoft。Extensions.Primitives
新しい動作
.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エイリアスを使用します。 - 完全修飾型名を使用します。
これらのパッケージの古いバージョンに依存している場合:
MissingMethodExceptionや TypeLoadException などのランタイム エラーを回避するには、依存するライブラリまたはバイナリを.NET 11 の参照アセンブリに対して再コンパイルします。
net11.0をターゲットとする場合は、PackageReferenceを削除して再構築します。 以前の TFM またはマルチターゲットをターゲットとする場合は、net11.0 以外のターゲットのパッケージ参照を現在のバージョンに更新してから、再コンパイルします。
これらのパッケージの.NET 11 バージョンにアップグレードすると、以前のバージョンからの次の破壊的変更が発生する可能性があります。
Microsoft.Extensions.DependencyInjection.Abstractions
- ActivatorUtilities.CreateInstance が一貫して動作する
- ActivatorUtilities.CreateInstance に null 以外のプロバイダーが必要になる
- FromKeyedServicesAttribute.Key プロパティを null 許容に
- キーが見つからない場合に使用されるキーなしサービス
- GetKeyedService と GetKeyedServices with AnyKey
Microsoft.Extensions.Logging.Abstractions
Microsoft.Extensions.Hosting.Abstractions
- BackgroundService で発生した未処理の例外
- BackgroundService は、すべての ExecuteAsync をタスクとして実行します
- BackgroundService が失敗したときに IHost.RunAsync と IHost.StopAsync がスローされる
影響を受ける API
なし。
.NET