Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
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 PackageReference esplicite e il processo di compilazione copiava gli assembly nella cartella di output:
- 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
Nuovo comportamento
A partire da .NET 11, queste nove librerie fanno parte del framework condiviso di base .NET:
- Non è necessario un
PackageReferenceper queste librerie se la destinazione ènet11.0o 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.
Azione consigliata
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
usingalias. - 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
- Il comportamento di ActivatorUtilities.CreateInstance è coerente
- ActivatorUtilities.CreateInstance richiede un provider non Null
- Proprietà FromKeyedServicesAttribute.Key che accetta valori null
- Servizio non con chiave usata quando non viene trovata la chiave
- GetKeyedService e GetKeyedServices con AnyKey
Microsoft.Extensions.Logging.Abstractions
Microsoft.Extensions.Hosting.Abstractions
- Eccezioni non gestite da un BackgroundService
- BackgroundService esegue tutte le operazioni ExecuteAsync come attività
- IHost.RunAsync e IHost.StopAsync generano un'eccezione quando un oggetto BackgroundService ha esito negativo
Le API interessate
Nessuno.