Opzioni del compilatore C# per segnalare errori e avvisi

Le opzioni seguenti controllano il modo in cui il compilatore segnala errori e avvisi. La nuova sintassi di MSBuild viene visualizzata in grassetto. La sintassi di csc.exe precedente è illustrata in code style.

  • WarningLevel / -warn: imposta il livello di avviso.
  • AnalysisLevel: imposta il livello di avviso facoltativo.
  • TreatWarningsAsErrors / -warnaserror: considera tutti gli avvisi come errori
  • WarningsAsErrors / -warnaserror: considera uno o più avvisi come errori
  • WarningsNotAsErrors / -warnnotaserror: considera uno o più avvisi non come errori
  • NoWarn / -nowarn: imposta un elenco di avvisi disabilitati.
  • CodeAnalysisRuleSet / -ruleset: specifica un file del set di regole che disabilita la diagnostica specifica.
  • ErrorLog / -errorlog: specifica un file per registrare tutti i dati di diagnostica del compilatore e dell'analizzatore.
  • ReportAnalyzer / -reportanalyzer: restituisce informazioni aggiuntive dell'analizzatore, ad esempio il tempo di esecuzione.

WarningLevel

L'opzione WarningLevel specifica il livello di avviso da visualizzare nel compilatore.

<WarningLevel>3</WarningLevel>

Il valore dell'elemento è il livello di avviso da visualizzare per la compilazione: i numeri più bassi mostrano solo gli avvisi con un livello di gravità elevato, i valori più alti mostrano più avvisi. Il valore deve essere zero o un numero intero positivo:

Livello avvisi Significato
0 Disattiva l'emissione di tutti i messaggi di avviso.
1 Visualizza i messaggi di avviso gravi.
2 Visualizza gli avvisi di livello 1 oltre ad alcuni avvisi meno gravi, ad esempio gli avvisi relativi ai membri di classi nascosti.
3 Visualizza gli avvisi di livello 2 oltre ad alcuni avvisi meno gravi, ad esempio gli avvisi relativi alle espressioni che restituiscono sempre true o false.
4 (valore predefinito) Visualizza tutti gli avvisi di livello 3 oltre ad avvisi informativi.

Avviso

La riga di comando del compilatore accetta valori maggiori di 4 per abilitare gli avvisi del ciclo di avvisi. Tuttavia, .NET SDK imposta WarningLevel in base al valore di AnalysisLevel nel file di progetto.

Per ottenere informazioni su un errore o un avviso, è possibile cercare il codice errore nell'indice della Guida. Per altri modi per ottenere informazioni su un errore o un avviso, vedere Errori del compilatore C#. Usare TreatWarningsAsErrors per considerare tutti gli avvisi come errori. Usare DisabledWarnings per disabilitare determinati avvisi.

Livello di analisi

L'opzione AnalysisLevel specifica ulteriori cicli di avviso e analizzatori da abilitare. Gli avvisi del ciclo di avvisi sono controlli aggiuntivi che migliorano il codice o assicurano che siano compatibili con le versioni future. Gli analizzatori offrono funzionalità simili a lint per migliorare il codice.

<AnalysisLevel>preview</AnalysisLevel>
Livello di analisi Significato
5 Visualizza tutti gli avvisi del ciclo di avvisi 5.
6 Visualizza tutti gli avvisi del ciclo di avvisi 6.
7 Visualizza tutti gli avvisi del ciclo di avvisi 7.
latest (valore predefinito) Visualizza tutti gli avvisi informativi fino alla versione corrente inclusa.
preview Visualizza tutti gli avvisi informativi fino alla versione di anteprima più recente inclusa.
Nessuno Disattiva tutti gli avvisi informativi.

Per altre informazioni sugli avvisi facoltativi, vedere Cicli di avviso.

Per ottenere informazioni su un errore o un avviso, è possibile cercare il codice di errore nell'indice della Guida. Per altri modi per ottenere informazioni su un errore o un avviso, vedere Errori del compilatore C#. Usare TreatWarningsAsErrors per considerare tutti gli avvisi come errori. Usare NoWarn per disabilitare avvisi specifici.

TreatWarningsAsErrors

L'opzione TreatWarningsAsErrors considera tutti gli avvisi come errori. È anche possibile usare WarningsAsErrors per impostare solo alcuni avvisi come errori. Se si attiva TreatWarningsAsErrors, è possibile usare WarningsNotAsErrors per elencare gli avvisi che non devono essere considerati come errori.

<TreatWarningsAsErrors>true</TreatWarningsAsErrors>

Tutti i messaggi di avviso vengono invece segnalati come errori. Il processo di compilazione si interrompe (non vengono compilati file di output). Per impostazione predefinita, l'opzione TreatWarningsAsErrors non è attiva, quindi gli avvisi non impediscono la generazione di un file di output. Facoltativamente, se si vuole che solo determinati avvisi vengano considerati errori, è possibile specificare un elenco delimitato da virgole di numeri di avvisi da considerare errori. È possibile specificare il set di tutti gli avvisi con supporto dei valori Null con la sintassi abbreviata Nullable. Usare WarningLevel per specificare il livello degli avvisi da visualizzare nel compilatore. Usare NoWarn per disabilitare avvisi specifici.

Importante

Esistono due piccole differenze tra l'uso dell'elemento <TreatWarningsAsErrors> nel file csproj e l'uso dell'opzione della riga di comando warnaserror MSBuild. TreatWarningsAsErrors influisce solo sul compilatore C#, non su altre attività di MSBuild nel file csproj. L'opzione della riga di comando warnaserror influisce su tutte le attività. In secondo luogo, il compilatore non genera alcun output in alcun avviso quando viene usata l'opzione TreatWarningsAsErrors. Il compilatore genera output quando viene usata l'opzione della riga di comando warnaserror.

WarningsAsErrors e WarningsNotAsErrors

Le opzioni WarningsAsErrors e WarningsNotAsErrors sostituiscono l'opzione TreatWarningsAsErrors per un elenco di avvisi. Questa opzione può essere usata con tutti gli avvisi CS. Il prefisso "CS" è facoltativo. È possibile usare il numero o "CS" seguito dal numero di errore o di avviso. Per altri elementi che influiscono sugli avvisi, vedere le proprietà comuni di MSBuild.

Abilitare gli avvisi 0219 e 0168 come errori:

<WarningsAsErrors>0219,CS0168</WarningsAsErrors>

Disabilitare gli stessi avvisi come errori:

<WarningsNotAsErrors>0219,CS0168</WarningsNotAsErrors>

Usare WarningsAsErrors per configurare un set di avvisi come errori. Usare WarningsNotAsErrors per configurare un set di avvisi che non devono essere considerati come errori quando tutti gli avvisi sono stati impostati come errori.

NoWarn

L'opzione NoWarn consente di evitare che il compilatore visualizzi uno o più avvisi, in cui warningnumber1, warningnumber2 sono numeri di avviso che il compilatoree deve eliminare. Separare più numeri di avviso con una virgola.

<NoWarn>warningnumber1,warningnumber2</NoWarn>

È sufficiente specificare la parte numerica dell'identificatore dell'avviso. Ad esempio, per eliminare l'avviso CS0028 è possibile specificare <NoWarn>28</NoWarn>. Il compilatore ignorerà automaticamente i numeri di avviso passati a NoWarn validi nelle versioni precedenti ma rimossi. Ad esempio, CS0679 era valido nel compilatore in Visual Studio .NET 2002 ma è stato rimosso successivamente.

Gli avvisi seguenti non possono essere eliminati dall'opzione NoWarn:

  • Avviso del compilatore (livello 1) CS2002
  • Avviso del compilatore (livello 1) CS2023
  • Avviso del compilatore (livello 1) CS2029

Si noti che gli avvisi sono da intendersi come l'indicazione di un potenziale problema con il codice, di conseguenza è importante comprendere quali siano i rischi derivanti dalla disabilitazione di ogni avviso specifico. Usare NoWarn solo quando si è certi che un avviso sia un falso positivo e non possa essere un bug del runtime.

È possibile usare un approccio più mirato per disabilitare gli avvisi:

  • La maggior parte dei compilatori consente di disabilitare gli avvisi solo per determinate righe di codice, in modo da poter comunque esaminare gli avvisi se si presentano altrove nello stesso progetto. Per eliminare un avviso solo in una parte specifica del codice in C#, usare la sintassi #pragma warning.

  • Se l'obiettivo è visualizzare un output più conciso e mirato nel log di compilazione, è possibile modificare il livello di dettaglio del log di compilazione. Per altre informazioni, vedere Procedura: Visualizzare, salvare e configurare file di log di compilazione.

Per aggiungere numeri di avviso a qualsiasi valore impostato in precedenza per NoWarn senza sovrascriverlo, fare riferimento a $(NoWarn) come illustrato nell'esempio seguente:

   <NoWarn>$(NoWarn);newwarningnumber3;newwarningnumber4</NoWarn>

CodeAnalysisRuleSet

Specifica un file di set di regole che configura la diagnostica specifica.

<CodeAnalysisRuleSet>MyConfiguration.ruleset</CodeAnalysisRuleSet>

Dove MyConfiguration.ruleset è il percorso del file del set di regole. Per altre informazioni sull'uso dei set di regole, vedere l'articolo nella documentazione di Visual Studio sui set di regole.

ErrorLog

Specificare un file per registrare tutti i dati di diagnostica del compilatore e dell'analizzatore.

<ErrorLog>compiler-diagnostics.sarif</ErrorLog>

Se si seleziona l'opzione ErrorLog, il compilatore restituisce un log SARIF (Static Analysis Results Interchange Format). I log SARIF vengono in genere letti dagli strumenti che analizzano i risultati della diagnostica del compilatore e dell'analizzatore.

È possibile specificare il formato SARIF usando l'argomento version per l'elemento ErrorLog:

<ErrorLog>logVersion21.json,version=2.1</ErrorLog>

Il separatore può essere una virgola (,) o un punto e virgola (;). I valori validi per la versione sono: "1", "2" e "2.1". Il valore predefinito è 1. "2" e "2.1" indicano entrambi SARIF versione 2.1.0.

ReportAnalyzer

Restituire informazioni aggiuntive dell'analizzatore, ad esempio il tempo di esecuzione.

<ReportAnalyzer>true</ReportAnalyzer>

Se si seleziona l'opzione ReportAnalyzer, il compilatore crea informazioni aggiuntive sul log MSBuild che mostrano i dettagli delle caratteristiche delle prestazioni degli analizzatori nella compilazione. Viene in genere usata dagli autori dell'analizzatore come parte della convalida dell'analizzatore.

Importante

Le informazioni aggiuntive sul log generate da questo flag vengono generate solo quando viene usata l'opzione della riga di comando -verbosity:detailed. Per altre informazioni, vedere l'articolo relativo alle opzioni nella documentazione di MSBuild.