Formato MSBuild e Visual Studio per i messaggi di diagnostica

Quando viene eseguito uno strumento che restituisce testo, MSBuild esamina il testo per individuare errori e avvisi. Molti strumenti usano un formato noto per segnalare questi messaggi. Per impostazione predefinita, MSBuild esamina il testo e segnala errori e/o avvisi in base all'output. Questo comportamento può essere modificato o disabilitato usando questi parametri nell'attività Exec : IgnoreStandardErrorWarningFormat, CustomErrorRegularExpressione CustomWarningRegularExpression.

Nota

Se si decide di usare la propria espressione regolare per rilevare gli errori e gli avvisi, è necessario sapere che MSBuild esaminerà il risultato una riga alla volta. Anche se l'espressione regolare personalizzata corrisponde a qualcosa tra più righe, non si comporterà in questo modo a causa del modo in cui MSBuild elabora tale testo.

Esaminare i quattro messaggi seguenti, tutti formattati correttamente e riconosciuti da MSBuild e Microsoft Visual Studio:

Main.cs(17,20): warning CS0168: The variable 'x' is declared but never used
C:\dir1\strings.resx(2) : error BC30188: Declaration expected.
cl : Command line warning D4024 : unrecognized source file type 'file1.cs', object . . .
error CS0006: Metadata file 'System.dll' could not be found.

Questi messaggi sono conformi al formato speciale in cinque parti illustrato qui. L'ordine di queste parti è importante e non deve cambiare.

Origin: : SubcategoryCategoryCodeText

ad esempio:

c1 : Command line warning D4024 : unrecognized source file type 'test.xyz'

Origin: c1
Subcategory: Command line
Category: warning
Code: D4024
Text: unrecognized source file type 'test.zyz'

Ognuno dei componenti di questo formato viene descritto come segue:

  • L'origine (obbligatoria) può essere vuota. Se presente, l'origine è in genere un nome di strumento, ad esempio cl in uno degli esempi. Ma potrebbe anche essere un nome di file, ad esempio "Main.cs", illustrato in un altro esempio. Se si tratta di un nome di file, deve essere un nome di file assoluto o relativo, seguito da informazioni facoltative di riga/colonna racchiuse tra parentesi in uno dei formati seguenti:

    (line) or (line-line) or (line-col) or (line,col-col) or (line,col,line,col)
    

    Le righe e le colonne iniziano da 1 in un file; ovvero l'inizio di un file è 1 e la colonna più a sinistra è 1. Se l'origine è un nome di strumento, non deve cambiare in base alle impostazioni locali; ovvero deve essere indipendente dalle impostazioni locali.

  • La sottocategoria (facoltativa) sottocategoria viene usata per classificare ulteriormente la categoria stessa. Non deve essere localizzata.

  • Categoria (obbligatorio) Categoria deve essere "error" o "warning". Il caso non importa. Come per l'origine, la categoria non deve essere localizzata.

  • Il codice (facoltativo) identifica un codice di errore o un codice di avviso specifico dell'applicazione. Il codice non deve essere localizzato e non deve contenere spazi.

  • Testo descrittivo che spiega l'errore e deve essere localizzato se si è in grado di soddisfare più impostazioni locali.

Quando MSBuild chiama gli strumenti da riga di comando (ad esempio, csc.exe o vbc.exe), esamina l'output generato dallo strumento ai flussi di errore standard e standard. Tutte le righe che corrispondono al formato di errore appena descritto verranno trattate in modo speciale; ovvero, le righe riconosciute come errori o avvisi verranno trasformate rispettivamente in errori di compilazione e avvisi. Per vedere il vantaggio reale di questo, è necessario creare da uno strumento di sviluppo come Visual Studio o VS Code. Poiché MSBuild considera questi messaggi in modo speciale, vengono registrati come avvisi ed errori di prima classe nell'elenco attività di Visual Studio. Se l'origine specifica le informazioni di riga/colonna, facendo doppio clic sul messaggio verrà visualizzata l'origine dell'errore nel file che causa l'errore.