Domande frequenti sugli analizzatori FxCop e .NET legacy

Può essere poco confusa comprendere le differenze tra gli analizzatori FxCop legacy (analisi binaria) e .NET (analisi di origine). Questo articolo aiuta a chiarire alcune possibili domande.

Qual è la differenza tra gli analizzatori FxCop e .NET legacy?

FxCop legacy esegue l'analisi post-compilazione in un assembly compilato. Viene eseguito come un eseguibile separato di nome FxCopCmd.exe. FxCopCmd.exe carica l'assembly compilato, esegue l'analisi del codice e quindi genera un report dei risultati (o utilità di diagnostica).

Gli analizzatori .NET sono basati sulla piattaforma del compilatore .NET ("Roslyn"). È possibile abilitarli da .NET SDK o installarli come pacchetto NuGet a cui fa riferimento il progetto o la soluzione. Gli analizzatori eseguono l'analisi basata sul codice sorgente durante l'esecuzione del compilatore. Gli analizzatori sono ospitati all'interno del processo del compilatore, csc.exe o vbc.exe ed eseguono l'analisi al momento della compilazione del progetto. I risultati degli analizzatori vengono indicati insieme ai risultati del compilatore.

Qual è la differenza tra gli analizzatori FxCop e gli analizzatori .NET?

Sia gli analizzatori FxCop che gli analizzatori .NET fanno riferimento alle implementazioni dell'analizzatore .NET Compiler Platform ("Roslyn") delle regole della CA FxCop. Prima di Visual Studio 2019 16.8 e .NET 5.0, questi analizzatori vengono forniti come Microsoft.CodeAnalysis.FxCopAnalyzers pacchetto NuGet. A partire da Visual Studio 2019 16.8 e .NET 5.0, questi analizzatori sono inclusi in .NET SDK. Sono disponibili anche come Microsoft.CodeAnalysis.NetAnalyzers pacchetto NuGet. Prendere in considerazione la migrazione dagli analizzatori FxCop agli analizzatori .NET.

Il comando Esegui analisi del codice esegue gli analizzatori .NET?

Prima della versione di Visual Studio 2019 16.5, quando si seleziona Analizza analisi> codice, viene eseguita l'analisi legacy. A partire da Visual Studio 2019 16.5, l'opzione di menu Esegui analisi codice esegue gli analizzatori basati su Roslyn per il progetto o la soluzione selezionata. Se sono stati installati analizzatori .NET, verranno eseguiti anche. Per altre informazioni, vedere Procedura: Eseguire l'analisi del codice manualmente per codice gestito.

La proprietà del progetto msbuild RunCodeAnalysis esegue gli analizzatori?

No. La proprietà RunCodeAnalysis in un file di progetto (ad esempio, un file con estensione csproj) viene usata solo per l'esecuzione di FxCop legacy. Esegue un'attività msbuild di post-compilazione che richiama FxCopCmd.exe.

Quindi, come si eseguono gli analizzatori .NET?

Per eseguire gli analizzatori .NET, abilitarli prima da .NET SDK o installarli come pacchetto NuGet. Compilare quindi il progetto o soluzione da Visual Studio o mediante msbuild. Gli avvisi e gli errori generati dagli analizzatori Roslyn verranno visualizzati nell'elenco errori o nella finestra di comando.

Viene visualizzato l'avviso CA0507 anche dopo aver installato il pacchetto NuGet analizzatori .NET

Se sono stati installati analizzatori .NET ma si continua a ricevere l'avviso CA0507 ""Esegui analisi del codice" è stato deprecato a favore degli analizzatori FxCop, che vengono eseguiti durante la compilazione", potrebbe essere necessario impostare la proprietà msbuild RunCodeAnalysis nel file di progetto su false. In caso contrario, l'analisi legacy verrà eseguita dopo ogni compilazione.

<RunCodeAnalysis>false</RunCodeAnalysis>

Quali regole sono state convertite in analizzatori .NET?

Per informazioni sulle regole di analisi legacy che sono state convertite in analizzatori .NET, vedere Stato della porta della regola Fxcop.

Gli avvisi di analisi del codice vengono considerati come errori

Se il progetto usa l'opzione di compilazione per considerare gli avvisi come errori, gli avvisi dell'analizzatore potrebbero essere visualizzati come errori. Per evitare che gli avvisi di analisi del codice vengano considerati come errori, seguire la procedura descritta in Domande frequenti sull'analisi del codice.

Vedere anche