Niektóre pakiety Microsoft.Extensions zawarte w udostępnionej strukturze

Aby zmniejszyć rozmiar aplikacji, uprościć zależności pakietów i usprawnić obsługę, .NET 11 zawiera dziewięć Microsoft.Extensions.* bibliotek w podstawowej strukturze udostępnionej. Projekty, które jawnie odwołują się do tych pakietów, otrzymują ostrzeżenie o kompilacji NU1510. Ostrzeżenie można rozwiązać, usuwając element PackageReference. Jeśli korzystasz ze starszej wersji tych pakietów, aktualizacja do platformy .NET 11 może ujawnić niezgodne zmiany wprowadzone między starszymi wersjami a platformą .NET 11.

Wersja wprowadzona

.NET 11 (wersja zapoznawcza 4)

Poprzednie zachowanie

Wcześniej następujące biblioteki Microsoft.Extensions.* nie były częścią platformy udostępnionej .NET. (Współużytkowaną strukturę uzyskuje się przy użyciu Sdk="Microsoft.NET.Sdk" lub analogicznie, odwołując się do dowolnego z pozostałych zestawów SDK platformy .NET.) Projekty, które ich potrzebowały, wymagały jawnych wpisów PackageReference, a proces kompilacji kopiował zespoły do folderu wyjściowego:

Nowe zachowanie

Począwszy od .NET 11, te dziewięć bibliotek jest częścią podstawowej platformy udostępnionej .NET:

  • Nie potrzebujesz PackageReference dla tych bibliotek, jeśli platformą docelową jest net11.0 lub nowsza wersja.
  • Jeśli jawnie odwołujesz się do tych pakietów, zostanie wyświetlone ostrzeżenie o kompilacji NU1510.
  • Te zestawy nie są już kopiowane do folderu wyjściowego.
  • W rzadkich przypadkach dodatkowe biblioteki API w domyślnym zestawie ładowanych bibliotek mogą powodować konflikty nazw lub typów. Aby rozwiązać konflikt, dodaj bardziej jawne dyrektywy using, użyj aliasu albo w pełni kwalifikowanej nazwy typu.

Typ zmiany przełamującej

Ta zmiana jest zmianą behawioralną.

Przyczyna zmiany

Uwzględnienie tych często używanych bibliotek w strukturze udostępnionej zmniejsza rozmiar aplikacji, upraszcza zależności pakietów i usprawnia obsługę.

Usuń element PackageReference dla dowolnego pakietu, którego dotyczy problem:

W przypadku projektów ukierunkowanych wyłącznie na net11.0 lub nowsze, usuń całkowicie element 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="..." />

Kod nadal działa bez modyfikacji — interfejsy API są teraz częścią środowiska uruchomieniowego.

W przypadku projektów przeznaczonych dla wielu platform docelowych (na przykład <TargetFrameworks>net10.0;net11.0</TargetFrameworks>) ostrzeżenie NU1510 nie jest zgłaszane, ponieważ pakiet jest nadal wymagany dla starszego elementu TFM. Nie jest wymagana żadna akcja — Narzędzie NuGet automatycznie wybiera odpowiedni zestaw dla każdej platformy docelowej. Jeśli chcesz być jawne, możesz warunkowo dołączyć odwołanie:

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

Rozwiązywanie konfliktów nazw w czasie kompilacji (rzadko):

Jeśli wystąpi błąd kompilacji, ponieważ nazwa w kodzie powoduje konflikt z jednym z nowo dołączonych interfejsów API, użyj jednej z następujących metod:

  • Dodaj bardziej szczegółową using dyrektywę.
  • Użyj aliasu using .
  • Użyj w pełni kwalifikowanej nazwy typu.

Jeśli zależysz od starszej wersji tych pakietów:

Aby uniknąć błędów środowiska uruchomieniowego, takich jak MissingMethodException lub TypeLoadException, ponownie skompiluj wszystkie zależne biblioteki lub pliki binarne względem zestawów odwołań .NET 11. Jeśli jako element docelowy wybierzesz net11.0, usuń PackageReference i ponownie skompiluj. Jeśli kierujesz kompilację na wcześniejsze platformy TFM lub na wiele platform docelowych, zaktualizuj referencje do pakietów dla obiektów docelowych innych niż net11.0 do aktualnej wersji, a następnie ponownie skompiluj.

Podczas uaktualniania tych pakietów do wersji .NET 11 mogą pojawić się następujące zmiany powodujące niezgodność z poprzednich wersji:

Microsoft. Extensions.DependencyInjection.Abstractions

Microsoft.Extensions.Logging.Abstractions

Microsoft.Extensions.Hosting.Abstractions

Interfejsy API, których dotyczy problem

Żaden.