Några Microsoft. Tilläggspaket som ingår i delat ramverk

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:

Nytt beteende

Från och med .NET 11 ingår dessa nio bibliotek i det .NET delade ramverket:

  • Du behöver ingen PackageReference för de här biblioteken när du riktar dig mot net11.0 eller 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 using direktiv, 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.

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 using direktiv.
  • Använd ett using alias.
  • 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

Microsoft.Extensions.Logging.Abstractions

Microsoft.Extensions.Hosting.Abstractions

Berörda API:er

Inga.