Některé balíčky Microsoft.Extensions zahrnuté ve sdílené platformě

Aby se zmenšila velikost aplikace, zjednodušila se závislosti balíčků a zjednodušila údržba, .NET 11 zahrnuje devět knihoven Microsoft.Extensions.* v základní sdílené rozhraní. Projekty, které explicitně odkazují na tyto balíčky, obdrží při sestavení upozornění NU1510. Upozornění můžete vyřešit odebráním souboru PackageReference. Pokud závisíte na starší verzi těchto balíčků, upgrade na verzi .NET 11 může odhalit zásadní změny zavedené mezi staršími verzemi a .NET 11.

Verze byla představena

.NET 11 Preview 4

Předchozí chování

Dříve nebyly následující knihovny Microsoft.Extensions.* součástí sdílené architektury .NET. (Sdílenou architekturu získáte pomocí Sdk="Microsoft.NET.Sdk" nebo podobným odkazem na některou z jiných sad SDK .NET.) Projekty, které je potřebovaly, vyžadovaly explicitní PackageReference položky a proces sestavení zkopíroval sestavení do výstupní složky:

Nové chování

Od .NET 11 jsou tyto devět knihoven součástí základní sdílené architektury .NET:

  • Pro tyto knihovny nepotřebujete PackageReference, pokud cílíte na net11.0 nebo novější verzi.
  • Pokud na tyto balíčky odkazujete explicitně, zobrazí se upozornění na sestavení NU1510.
  • Tato sestavení se už nekopírují do výstupní složky.
  • Ve výjimečných případech můžou další rozhraní API ve výchozí sadě zatížení způsobit konflikty názvů nebo typů. Chcete-li vyřešit konflikt, přidejte další explicitní using direktivy, použijte alias nebo použijte plně kvalifikovaný název typu.

Typ zásadní změny

Tato změna je změna chování.

Důvod změny

Zahrnutím těchto běžně používaných knihoven do sdílené architektury se zmenšuje velikost aplikace, zjednodušuje závislosti balíčků a zjednodušuje údržbu.

Odeberte PackageReference pro všechny dotčené balíčky:

U projektů, které cílí pouze na net11.0 nebo novější verze, zcela odeberte 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="..." />

Váš kód bude dál fungovat beze změny – rozhraní API jsou teď součástí modulu runtime.

U projektů s více cílovými rámci (například <TargetFrameworks>net10.0;net11.0</TargetFrameworks>) se NU1510 nevyvolá, protože je balíček stále vyžadován pro starší TFM. Nevyžaduje se žádná akce – NuGet automaticky vybere odpovídající sestavení pro každou cílovou architekturu. Pokud chcete být explicitní, můžete podmíněně zahrnout odkaz:

<!-- 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'" />

Vyřešte konflikty názvů při kompilaci (vzácné):

Pokud dojde k chybě kompilace, protože název v kódu je v konfliktu s jedním z nově zahrnutých rozhraní API, použijte jeden z těchto přístupů:

  • Přidejte konkrétnější using direktivu.
  • using Použijte alias.
  • Použijte plně kvalifikovaný název typu.

Pokud závisíte na starší verzi těchto balíčků:

Aby nedocházelo k chybám za běhu, jako jsou MissingMethodException nebo TypeLoadException, překompilujte všechny závislé knihovny nebo binární soubory proti referenčním sestavením .NET 11. Pokud cílíte na net11.0, odeberte PackageReference a znovu sestavte. Pokud cílíte na starší verze TFM nebo na více cílů, aktualizujte reference na balíčky pro cíle jiné než net11.0 na aktuální verzi a poté znovu zkompilujte.

Při upgradu na .NET 11 těchto balíčků se můžou zobrazit následující zásadní změny z předchozích verzí:

Microsoft. Extensions.DependencyInjection.Abstractions

Microsoft.Extensions.Logging.Abstractions

Microsoft.Extensions.Hosting.Abstractions

Ovlivněná rozhraní API

Žádné.