Alcuni pacchetti Microsoft.Extensions inclusi nel framework condiviso

Per ridurre le dimensioni dell'applicazione, semplificare le dipendenze dei pacchetti e semplificare la manutenzione, .NET 11 include nove librerie Microsoft.Extensions.* nel framework condiviso di base. I progetti che fanno riferimento in modo esplicito a questi pacchetti ricevono l'avviso di compilazione NU1510. È possibile risolvere l'avviso rimuovendo .PackageReference Se si dipende da una versione precedente di questi pacchetti, l'aggiornamento alla versione .NET 11 potrebbe esporre modifiche di rilievo introdotte tra le versioni precedenti e .NET 11.

Versione introdotta

.NET 11 Preview 4

Comportamento precedente

In precedenza, le librerie /> seguenti Sdk="Microsoft.NET.Sdk", oppure facendo analogamente riferimento a uno qualsiasi degli altri SDK .NET.) I progetti che ne avevano bisogno richiedevano voci PackageReference esplicite e il processo di compilazione copiava gli assembly nella cartella di output:

Nuovo comportamento

A partire da .NET 11, queste nove librerie fanno parte del framework condiviso di base .NET:

  • Non è necessario un PackageReference per queste librerie se la destinazione è net11.0 o versioni successive.
  • Se si fa riferimento in modo esplicito a questi pacchetti, viene visualizzato l'avviso di compilazione NU1510.
  • Questi assembly non vengono più copiati nella cartella di output.
  • In rari casi, le API aggiuntive nel set di carico predefinito potrebbero causare conflitti di nome o tipi. Per risolvere un conflitto, aggiungere direttive più esplicite using , usare un alias o usare un nome di tipo completo.

Tipo di cambiamento che interrompe la compatibilità

Questa modifica è una modifica funzionale.

Motivo della modifica

L'inclusione di queste librerie comunemente usate nel framework condiviso riduce le dimensioni dell'applicazione, semplifica le dipendenze dei pacchetti e semplifica la manutenzione.

Rimuovere il PackageReference per qualsiasi pacchetto interessato:

Per i progetti destinati esclusivamente a net11.0 o versioni successive, rimuovere completamente 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="..." />

Il codice continua a funzionare senza modifiche. Le API fanno ora parte del runtime.

Per i progetti con più destinazioni (ad esempio, <TargetFrameworks>net10.0;net11.0</TargetFrameworks>), NU1510 non viene generato perché il pacchetto è ancora necessario per il TFM precedente. Non è necessaria alcuna azione: NuGet seleziona automaticamente l'assembly appropriato per ogni framework di destinazione. Se si vuole essere espliciti, è possibile includere in modo condizionale il riferimento:

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

Risolvere i conflitti di nomi in fase di compilazione (rari):

Se si verifica un errore di compilazione perché un nome nel codice è in conflitto con una delle API appena incluse, usare uno di questi approcci:

  • Aggiungere una direttiva più specifica using .
  • Usare un using alias.
  • Usare un nome di tipo completo e qualificato.

Se si dipende da una versione precedente di questi pacchetti:

Per evitare errori di runtime come MissingMethodException o TypeLoadException, ricompilare eventuali librerie o file binari dipendenti rispetto agli assembly di riferimento .NET 11. Se la destinazione è net11.0, rimuovi PackageReference e ricompila. Se usi TFM precedenti o il multitargeting, aggiorna i riferimenti ai pacchetti per le destinazioni non net11.0 alla versione corrente e quindi ricompila.

Quando si esegue l'aggiornamento alle versioni .NET 11 di questi pacchetti, potrebbero verificarsi le modifiche di rilievo seguenti:

Microsoft.Extensions.DependencyInjection.Abstractions

Microsoft.Extensions.Logging.Abstractions

Microsoft.Extensions.Hosting.Abstractions

Le API interessate

Nessuno.