2010-04-23 18 views
20

Ho attivato "Considera gli avvertimenti come errori" per il mio progetto VS, il che significa che ottengo errori per la documentazione mancante (promemoria per questo particolare progetto).avviso di soppressione per codice C# generato

Tuttavia, parte del codice è generata da uno strumento personalizzato che non inserisce la documentazione xml, quindi sto cercando di ignorare la documentazione xml mancante solo per il codice generato, non per l'intero progetto. Non ho alcuna influenza sul file effettivo generato e non posso realmente inserire nulla nel file (poiché viene rigenerato frequentemente dallo strumento), quindi cerco qualcosa di esistente al di fuori del file generato (le classi generate sono parziali, se questo aiuta)

+1

@TomTom: Beh, non lo vedo come una soluzione valida (e chiamarlo stupido è un po 'esagerato, l'autore ha entrambi battuto di 100k punti qui su SO ...) –

risposta

9

MODIFICA: vedere i commenti che indicano che questo non funziona con C# 4. Non sono chiaro se ha funzionato nelle versioni precedenti del compilatore. La specifica C# 4 lo rende piuttosto chiaro. Sezione 2.5.8.1 afferma:

Una direttiva #pragma warning restore ripristina tutto o il dato insieme di avvertimenti allo stato in cui era in vigore all'inizio della unità di compilazione. Si noti che se un avviso particolare è stato disabilitato esternamente, un #pragma warning restore (se per tutti o l'avviso specificato) non riattiverà tale avviso.

Jeff ha un workaround in a blog post - fondamentalmente per rielaborare il codice generato automaticamente come parte del build.


Come dice Tom, è possibile aggiungere un "ignora" per l'intero progetto (Build/eliminare gli avvisi - digitare 1591 come numero di avvertimento) - ma allora si può ripristinare il te stesso avviso nella parte superiore della ciascuno dei vostri file non generati:

#pragma warning restore 1591 

E 'abbastanza brutto, ma funziona (ho appena provato).

+0

@TomTom : In quale modo? Puoi facilmente automatizzare un controllo che hai questo pragma all'inizio di ogni file non generato. (L'OP potrebbe avere già qualcosa da controllare per le dichiarazioni sul copyright ecc. - potrebbe facilmente essere modificato per includere tale praga.) Il risultato finale è ciò che l'OP vuole: errori per i file scritti a mano che non hanno commenti XML, e nessun errore di questo tipo per i file generati. –

+0

Accettare questo come la risposta come tutti gli altri non riescono a risolvere il problema di non toccare il file generato ... bello, Jon –

+1

@Jon: Questo non funziona per C# 4. Secondo la specifica, se l'avviso è globalmente disabilitato (ad esempio dal progetto), il ripristino verrà ripristinato allo stato globale (cioè disabilitato). Dovrei aggiungere, l'ho provato (non ho solo letto le specifiche). –

2

Il meglio che si può fare in questo è sopprimere il particolare avviso nel progetto che contiene il codice generato. Puoi farlo in Proprietà progetto nella scheda Costruisci. Non è l'ideale, ma a parte mettere il pragma nel codice generato, è il meglio che puoi fare.

9

Il modo migliore per evitare di avere avvisi o errori di analisi del codice su codice generato è quello di decorare le vostre classi generate con il GeneratedCodeAttribute e rendere il file di codice termina con il modello * .generated.cs.

Se i file di codice hanno anche un'intestazione del file, si dovrebbe avuto questi tag:

//---------------------- 
// <auto-generated> 
//  Tool description 
// </auto-generated> 
//---------------------- 

Questo non è obbligatorio, ma se si dispone di intestazione del file di codice è una buona pratica.

In questo modo, FxCop e altri strumenti come StyleCop non analizzeranno più il codice.

Ciò che è anomalo è che lo strumento di generazione del codice non decortica gli elementi del codice con l'attributo menzionato sopra. Cerca di verificare se è disponibile un'opzione da attivare nelle impostazioni dello strumento o contatta il team di sviluppo.


EDIT: fa le classi generate sono classi parziali e fare il nome effettivo classi e il numero cambia spesso? Perché se il contenuto del codice generato non si sta muovendo molto, quello che puoi fare è semplicemente creare un altro file di codice e dichiarare semplicemente la classe parziale generata per decorarli con GeneratedCodeAttribute. Una volta mi ha salvato la vita (e il mio tempo!).

+1

"Non ho alcuna influenza sul file generato" - non è questa la regola –

+0

Capisco qual è il problema, ho avuto esattamente lo stesso problema con un DSL proveniente da Codeplex. Il fatto è che se viene rigenerato spesso, non si vuole modificarlo manualmente ogni volta. Quello che ho fatto è che Ho contattato lo sviluppatore di Codeplex che ha risolto il problema: esistono due soluzioni: cercare un'impostazione da abilitare nello strumento o contattare il team di sviluppo – Ucodia

+0

@TomTom (e @TheRHCP): come sottolinea Jon, non riesco a controllare il codice generato quindi non andare sull'aggiunta di attributi. Inoltre, le classi parziali possono risolvere i commenti mancanti sulla classe, ma non aiutano le mie proprietà/metodi ... –

Problemi correlati