Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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:
- 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
Nowe zachowanie
Począwszy od .NET 11, te dziewięć bibliotek jest częścią podstawowej platformy udostępnionej .NET:
- Nie potrzebujesz
PackageReferencedla tych bibliotek, jeśli platformą docelową jestnet11.0lub 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ę.
Zalecana akcja
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ą
usingdyrektywę. - 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
- AktywatorUtilities.CreateInstance zachowuje się spójnie
- ActivatorUtilities.CreateInstance wymaga dostawcy innego niż null
- Właściwość FromKeyedServicesAttribute.Key może mieć wartość null
- Usługa bez klucza używana, gdy nie znaleziono usługi z kluczem
- GetKeyedService i GetKeyedServices z dowolnym kluczem
Microsoft.Extensions.Logging.Abstractions
Microsoft.Extensions.Hosting.Abstractions
- Nieobsługiwane wyjątki z usługi BackgroundService
- BackgroundService uruchamia cały proces ExecuteAsync jako Task
- IHost.RunAsync i IHost.StopAsync zgłaszają wyjątek, gdy BackgroundService zawiedzie
Interfejsy API, których dotyczy problem
Żaden.