Analizzare le dipendenze per convertire il codice da .NET Framework a .NET

Per identificare le dipendenze di terze parti non supportate nel progetto, è prima necessario comprendere le dipendenze. Le dipendenze esterne sono i pacchetti NuGet o i file .dll a cui si fa riferimento nel progetto, ma che non si compilano in prima persona.

La conversione del codice in .NET Standard 2.0 o versione precedente garantisce che possa essere usata con .NET Framework e .NET. Tuttavia, se non è necessario usare la libreria con .NET Framework, prendi in considerazione la destinazione della versione più recente di .NET.

Eseguire la migrazione dei pacchetti NuGet a PackageReference

.NET non può usare il file packages.config per i riferimenti NuGet. .NET e .NET Framework possono usare PackageReference per specificare le dipendenze dei pacchetti. Se usi packages.config per specificare i pacchetti nel progetto, convertili nel formato PackageReference.

Per informazioni su come eseguire la migrazione, fai riferimento all'articolo Eseguire la migrazione da packages.config a PackageReference.

Aggiornare i pacchetti NuGet

Dopo aver eseguito la migrazione del progetto al formato PackageReference, verifica se i pacchetti sono compatibili con .NET.

Prima di tutto, aggiorna i pacchetti alla versione più recente che è possibile eseguire. Questa operazione può essere eseguita con l'interfaccia utente di Gestione pacchetti NuGet in Visual Studio. È probabile che le versioni più recenti delle dipendenze del pacchetto siano già compatibili con .NET Core.

Analizzare le dipendenze dei pacchetti

Se non hai già verificato che le dipendenze del pacchetto convertito e aggiornato funzionino in .NET Core, puoi ottenere questo risultato in due modi:

Usare nuget.org

Puoi visualizzare i moniker framework di destinazione (TFM) supportati da ogni pacchetto in nuget.org nella sezione Dipendenze della pagina del pacchetto.

La verifica della compatibilità risulta più semplice nel sito, ma le informazioni presenti in Dipendenze non sono disponibili per tutti i pacchetti nel sito.

Usare NuGet Package Explorer

Un pacchetto NuGet è un set di cartelle contenenti assembly specifici per la piattaforma. Verifica se nel pacchetto è presente una cartella che contiene un assembly compatibile.

Il metodo più semplice per esaminare le cartelle del pacchetto NuGet è lo strumento NuGet Package Explorer. Dopo aver installato lo strumento seguire questa procedura per visualizzare i nomi delle cartelle:

  1. Aprire NuGet Package Explorer.
  2. Fare clic su Open package from online feed (Apri il pacchetto dal feed online).
  3. Cercare il nome del pacchetto.
  4. Selezionare il nome del pacchetto nei risultati della ricerca e fare clic su open (Apri).
  5. Espandere la cartella lib sul lato destro per visualizzare i nomi delle cartelle.

Cerca una cartella con nomi usando uno dei modelli seguenti: netstandardX.Y, netX.Y o netcoreappX.Y.

Questi valori sono i moniker framework di destinazione (TFM) che eseguono il mapping alle versioni di .NET Standard, .NET e .NET Core, che sono tutte compatibili con .NET.

Importante

Quando si esaminano i TFM supportati da un pacchetto, nota che un TFM diverso da netstandard* è destinato a un'implementazione specifica di .NET, ad esempio .NET 5, .NET Core o .NET Framework. A partire da .NET 5, il net* TFM (senza una designazione del sistema operativo) sostituisce netstandard* in modo efficace come destinazione portabile. Ad esempio, net5.0 è destinata alla superficie dell'API .NET 5 ed è multipiattaforma, ma net5.0-windows è destinata alla superficie dell'API .NET 5 come implementata nel sistema operativo Windows.

Modalità di compatibilità di .NET Framework

Il risultato dell'analisi dei pacchetti NuGet può essere che i pacchetti supportano solo .NET Framework.

A partire da .NET Standard 2.0 è stata introdotta la modalità di compatibilità di .NET Framework. Questa modalità consente a progetti .NET Standard e .NET Core di gestire riferimenti a librerie .NET Framework. I riferimenti alle librerie .NET Framework non funzionano per tutti i progetti, ad esempio se la libreria usa API Windows Presentation Foundation (WPF), ma sono in grado di risolvere molti scenari di portabilità.

Quando nel progetto si fa riferimento a pacchetti NuGet che supportano .NET Framework nel progetto, ad esempio Huitian.PowerCollections, viene visualizzato un avviso di fallback del pacchetto (NU1701) simile all'esempio seguente:

NU1701: Package ‘Huitian.PowerCollections 1.0.0’ was restored using ‘.NETFramework,Version=v4.6.1’ instead of the project target framework ‘.NETStandard,Version=v2.0’. This package may not be fully compatible with your project.

Questo avviso viene visualizzato quando si aggiunge il pacchetto e ogni volta che si esegue la compilazione, per garantire che il pacchetto venga testato con il progetto. Se il progetto funziona come previsto, è possibile eliminare l'avviso modificando le proprietà del pacchetto in Visual Studio o modificando manualmente il file di progetto nell'editor di codice preferito.

Per eliminare l'avviso modificando il file di progetto, trovare la voce PackageReference del pacchetto per il quale si vuole eliminare l'avviso e aggiungere l'attributo NoWarn. L'attributo NoWarn accetta un elenco delimitato da virgole di tutti gli ID avviso. L'esempio seguente illustra come eliminare l'avviso NU1701 per il pacchetto Huitian.PowerCollections modificando manualmente il file di progetto:

<ItemGroup>
  <PackageReference Include="Huitian.PowerCollections" Version="1.0.0" NoWarn="NU1701" />
</ItemGroup>

Per altre informazioni sull'eliminazione degli avvisi del compilatore in Visual Studio, vedere Non visualizzare avvisi per i pacchetti NuGet.

Se i pacchetti NuGet non verranno eseguiti in .NET

Se un pacchetto NuGet importante non può essere eseguito in .NET Core, è possibile provare varie soluzioni:

  • Se il progetto è open source e ospitato in una posizione come GitHub, è possibile coinvolgere direttamente gli sviluppatori.
  • È possibile contattare direttamente l'autore in nuget.org. Cercare il pacchetto e fare clic su Contact Owners (Contatta proprietari) sul lato sinistro della pagina del pacchetto.
  • È possibile cercare un altro pacchetto che supporta .NET Core ed esegue la stessa attività del pacchetto in uso.
  • È possibile tentare di scrivere autonomamente il codice eseguito dal pacchetto.
  • È inoltre possibile eliminare la dipendenza del pacchetto modificando la funzionalità dell'app, almeno fino a quando una versione compatibile del pacchetto non diventa disponibile.

Tenere presente che spesso i gestori di progetti open source e gli autori di pacchetti NuGet sono volontari. Questi utenti offrono il loro contributo a titolo gratuito perché sono interessati a un determinato argomento e in molti casi svolgono un'altra attività. Tieni presente questo aspetto quando richiedi loro supporto per .NET Core.

Se non sei in grado di risolvere il problema con nessuna delle opzioni precedenti, potrebbe essere necessario rimandare il trasferimento a .NET Core a una data successiva.

Il team .NET è interessato a sapere quali sono le librerie più importanti da supportare in .NET Core. È possibile inviare un messaggio di posta elettronica indicando le librerie preferite all'indirizzo dotnet@microsoft.com.

Analizzare le dipendenze non NuGet

Nel file system può essere presente una dipendenza diversa da un pacchetto NuGet, ad esempio una DLL. È possibile determinare la portabilità di tale dipendenza usando la funzionalità di analisi binaria di .NET Upgrade Assistant.

Passaggi successivi