Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
För att minska programstorleken, förenkla paketberoenden och effektivisera servicen innehåller .NET 11 nio Microsoft.Extensions.*-bibliotek i det grundläggande delade ramverket. Projekt som uttryckligen refererar till dessa paket får byggvarning NU1510. Du kan åtgärda varningen genom att ta bort PackageReference. Om du är beroende av en äldre version av dessa paket kan en uppgradering till .NET 11-versionen blotta brytande ändringar som har införts mellan äldre versioner och .NET 11.
Version lanserad
.NET 11 Förhandsversion 4
Tidigare beteende
Tidigare ingick inte följande Microsoft.Extensions.*-bibliotek i det .NET delade ramverket. (Du får det delade ramverket genom att använda Sdk="Microsoft.NET.Sdk", eller på liknande sätt genom att referera till någon av de andra .NET SDK:erna.) I projekt som behövde dem krävdes uttryckliga PackageReference-poster, och byggprocessen kopierade assemblyerna till utdatamappen:
- 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
Nytt beteende
Från och med .NET 11 ingår dessa nio bibliotek i det .NET delade ramverket:
- Du behöver ingen
PackageReferenceför de här biblioteken när du riktar dig motnet11.0eller senare. - Om du refererar till dessa paket explicit får du byggvarningen NU1510.
- Dessa samlingar kopieras inte längre till utdatamappen.
- I sällsynta fall kan de ytterligare API:erna i standardinläsningsuppsättningen orsaka namn- eller typkonflikter. Lös en konflikt genom att lägga till mer explicita
usingdirektiv, använda ett alias eller använda ett fullständigt kvalificerat typnamn.
Typ av brytande ändring
Den här ändringen är en beteendeförändring.
Orsak till ändring
Om du inkluderar dessa vanliga bibliotek i det delade ramverket minskar programstorleken, förenklar paketberoenden och effektiviserar servicen.
Rekommenderad åtgärd
Ta bort PackageReference för varje berört paket:
För projekt som endast riktar sig till net11.0 eller senare tar du bort PackageReference helt:
<!-- 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="..." />
Koden fortsätter att fungera utan ändringar – API:erna är nu en del av körningen.
För projekt med flera mål (till exempel <TargetFrameworks>net10.0;net11.0</TargetFrameworks>), utlöses inte NU1510 eftersom paketet fortfarande krävs för den äldre TFM:n. Ingen åtgärd krävs – NuGet väljer lämplig sammansättning för varje målramverk automatiskt. Om du vill vara explicit kan du villkorligt inkludera referensen:
<!-- 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'" />
Lösa konflikter med kompileringstidsnamn (sällsynt):
Om du stöter på ett kompileringsfel eftersom ett namn i koden står i konflikt med något av de nyligen inkluderade API:erna använder du någon av följande metoder:
- Lägg till ett mer specifikt
usingdirektiv. - Använd ett
usingalias. - Använd ett fullständigt kvalificerat typnamn.
Om du är beroende av en äldre version av dessa paket:
För att undvika körningsfel som MissingMethodException eller TypeLoadException bör du kompilera om eventuella beroende bibliotek eller binärfiler mot .NET 11-referensassemblyerna. Om du riktar in dig på net11.0, tar du bort PackageReference och bygger om. Om du riktar dig mot tidigare TFM:er eller har flera mål, uppdatera paketreferenserna för mål som inte är net11.0 till den aktuella versionen och kompilera sedan om.
Följande icke-bakåtkompatibla ändringar från tidigare versioner kan uppstå vid uppgradering till .NET 11 versioner av dessa paket:
Microsoft. Extensions.DependencyInjection.Abstractions
- ActivatorUtilities.CreateInstance fungerar konsekvent
- ActivatorUtilities.CreateInstance kräver icke-null-provider
- Egenskapen FromKeyedServicesAttribute.Key är null
- Icke-nyckelbaserad tjänst som används när nyckeln inte hittades
- GetKeyedService och GetKeyedServices med AnyKey
Microsoft.Extensions.Logging.Abstractions
Microsoft.Extensions.Hosting.Abstractions
- Ohanterade undantag i en BackgroundService
- BackgroundService kör hela ExecuteAsync som en uppgift
- IHost.RunAsync och IHost.StopAsync genererar när en BackgroundService misslyckas
Berörda API:er
Inga.