.NET Portability Analyzer
Importante
La porta API è stata deprecata a favore dell'analisi binaria con lo strumento .NET Upgrade Assistant . Il servizio back-end di ApiPort è stato arrestato, quindi per usare lo strumento è necessario usarlo offline. Per altre informazioni, vedere il file LEGGIMI di ApiPort.
È possibile fare in modo che le librerie in uso supportino architetture multi-piattaforma Si vuole vedere quanto lavoro è necessario per eseguire l'applicazione .NET Framework in .NET Core? .NET Portability Analyzer è uno strumento che analizza gli assembly e fornisce un report dettagliato sulle API .NET mancanti per le applicazioni o le librerie da trasferire nelle piattaforme .NET specificate. Portability Analyzer è un'app console che analizza gli assembly in base a file o directory specificati.
Dopo aver convertito il progetto in modo che usi come destinazione la nuova piattaforma, ad esempio .NET Core, è possibile usare l'Analizzatore della compatibilità della piattaforma basato su Roslyn per identificare le API che generano eccezioni PlatformNotSupportedException e altri problemi di compatibilità.
Destinazioni comuni
- .NET: dispone di una progettazione modulare, supporta l'installazione side-by-side e è destinata a scenari multipiattaforma. L'installazione side-by-side consente di adottare nuove versioni di .NET senza interrompere altre app. Se l'obiettivo è convertire l'app in .NET e supportare più piattaforme, questa è la destinazione consigliata.
- .NET Standard: include le API .NET Standard disponibili in tutte le implementazioni .NET.
- ASP.NET Core: framework Web moderno basato su .NET. Se l'obiettivo è convertire l'app Web in .NET (Core) per supportare più piattaforme, questa è la destinazione consigliata.
- .NET + Platform Extensions: include le API .NET oltre a Windows Compatibility Pack, che fornisce molte delle tecnologie .NET Framework specifiche di Windows.
- .NET Standard + Platform Extensions: include le API .NET Standard oltre a Windows Compatibility Pack, che fornisce molte delle tecnologie .NET Framework specifiche di Windows.
Come usare .NET Portability Analyzer
Per iniziare a usare il .NET Portability Analyzer in Visual Studio, è prima necessario clonare e compilare il progetto dotnet-apiport. Funziona nelle versioni Visual Studio 2017 e Visual Studio 2019.
Importante
.NET Portability Analyzer non è supportato in Visual Studio 2022.
Visualizzazione a livello di soluzione
Un passaggio utile nell'analisi di una soluzione con molti progetti consiste nel visualizzare le dipendenze per comprendere quale subset di assembly dipende da cosa. La raccomandazione generale consiste nell'applicare i risultati dell'analisi in un approccio bottom-up a partire dai nodi foglia in un grafico delle dipendenze.
Per recuperarlo, eseguire il comando seguente:
ApiPort.exe analyze -r DGML -f [directory or file]
Il risultato sarà simile al seguente all'apertura in Visual Studio:
Analizzare la portabilità
Immettere il comando seguente per analizzare la directory corrente:
ApiPort.exe analyze -f .
Per analizzare un elenco specifico di file .dll, immettere il comando seguente:
ApiPort.exe analyze -f first.dll -f second.dll -f third.dll
Per specificare come destinazione una versione specifica, usare il parametro -t
:
ApiPort.exe analyze -t ".NET, Version=5.0" -f .
Per altre informazioni, eseguire il comando ApiPort.exe -?
.
È consigliabile includere tutti i file .exe e .dll correlati di cui si è proprietari e si desidera eseguire la conversione e escludere i file da cui dipende l'app, ma non si è proprietari e non è possibile convertire. Questa operazione consentirà di ottenere il report di portabilità più pertinente possibile.
Visualizzare e interpretare i risultati di portabilità
Nel report sono visualizzate solo le API non supportate da una piattaforma di destinazione. Il report di portabilità .NET viene salvato come file nel formato specificato. Il valore predefinito corrisponde a un file di Excel (xlsx) nella directory corrente.
Riepilogo della portabilità
La sezione Portability Summary (Riepilogo della portabilità) del report indica la percentuale di portabilità per ogni assembly incluso nell'esecuzione. Nell'esempio precedente, il 71,24% delle API .NET Framework usate nell'app svcutil
sono disponibili in .NET Core + Estensioni della piattaforma. Se si esegue lo strumento .NET Portability Analyzer per più assembly, per ognuno di questi deve essere presente una riga nel report di riepilogo della portabilità.
Dettagli
Nella sezione Details del report sono elencate le API mancanti da una delle Targeted Platforms selezionate.
- Tipo di destinazione: al tipo manca un'API da una piattaforma di destinazione.
- Membro di destinazione: il metodo non è presente in una piattaforma di destinazione.
- Assembly name (Nome dell'assembly): assembly .NET Framework in cui deve trovarsi l'API mancante.
- Ogni piattaforma di destinazione selezionata è una colonna, ad esempio ".NET Core": il valore "Not supported" indica che l'API non è supportata in questa piattaforma di destinazione.
- Recommended Changes: l'API o la tecnologia consigliata a cui passare. Questo campo è attualmente vuoto o non aggiornato per molte API. A causa del numero elevato di API, è una sfida significativa mantenerla aggiornata.
Componenti mancanti
Potresti trovare una sezione Assembly mancanti nel report. Questa sezione contiene un elenco di assembly a cui fanno riferimento gli assembly analizzati e che non sono stati analizzati. Se si tratta di assembly di cui si ha la proprietà, includerli nell'esecuzione dell'API Portability Analyzer (ApiPort) per ottenere un report dettagliato sulla portabilità a livello di API. Se si tratta di una libreria di terze parti, verificare se è presente una versione più recente che supporta la piattaforma di destinazione e prendere in considerazione il passaggio alla versione più recente. L'elenco dovrebbe col tempo includere tutti gli assembly di terze parti da cui dipende l'app con una versione che supporta la piattaforma di destinazione.
Vedere anche
Per altre informazioni su .NET Portability Analyzer, vedere la documentazione di GitHub.