Opzioni del compilatore C# per segnalare errori e avvisi
Le opzioni seguenti controllano il modo in cui il compilatore segnala errori e avvisi.
Sintassi di MSBuild | sintassi csc.exe | Descrizione |
---|---|---|
WarningLevel |
-warn |
Impostare il livello di avviso. Altre informazioni. |
AnalysisLevel |
/ | Impostare il livello di avviso facoltativo. Altre informazioni. |
TreatWarningsAsErrors |
-warnaserror |
Considera tutti gli avvisi come errori. Altre informazioni. |
WarningsAsErrors |
-warnaserror |
Considerare uno o più avvisi come errori. Altre informazioni. |
WarningsNotAsErrors |
-warnnotaserror |
Considerare uno o più avvisi non come errori. Altre informazioni. |
NoWarn |
-nowarn |
Impostare un elenco di avvisi disattivati. Altre informazioni. |
CodeAnalysisRuleSet |
-ruleset |
Specificare un file del set di regole che disabilita le diagnostiche specifiche. Altre informazioni. |
ErrorLog |
-errorlog |
Specificare un file per registrare tutti i dati di diagnostica del compilatore e dell'analizzatore. Altre informazioni. |
ReportAnalyzer |
-reportanalyzer |
Restituire informazioni aggiuntive dell'analizzatore, ad esempio il tempo di esecuzione. Altre informazioni. |
Nota
Per altre informazioni sulla configurazione di queste opzioni per il progetto, vedere Opzioni del compilatore.
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. Oltre all'elenco degli ID di avviso, è anche possibile specificare la stringa nullable
, che considera tutti gli avvisi correlati al supporto dei valori Null come errori.
Abilitare gli avvisi 0219, 0168 e tutti gli avvisi che ammettono i valori Null come errori:
<WarningsAsErrors>0219,CS0168,nullable</WarningsAsErrors>
Disabilitare gli stessi avvisi come errori:
<WarningsNotAsErrors>0219,CS0168,nullable</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. È possibile specificare nullable
per disabilitare tutti gli avvisi correlati al supporto dei valori Null.
<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.