2010-04-23 14 views
20

He activado "Tratar advertencias como errores" para mi proyecto VS, lo que significa que recibo errores por falta de documentación (buen recordatorio para este proyecto en particular).Suprime la advertencia para código C# generado

Sin embargo, parte del código es generado por una herramienta personalizada que no inserta documentación xml, así que estoy buscando ignorar la documentación xml que falta para el código generado solamente, no para todo el proyecto. No influyo en el archivo real generado y realmente no puedo insertar nada en el archivo (ya que la herramienta lo regenera frecuentemente) por lo que busco algo existente fuera del archivo generado (las clases que se generan son parciales, si eso ayuda)

+1

@TomTom: Bueno, no veo esto como una solución válida (y llamarlo estúpido es un poco exagerado, el autor nos tiene a ambos vencidos por 100k puntos aquí en SO ...) –

Respuesta

9

EDITAR: Vea los comentarios que indican que no funciona con C# 4. No tengo claro si funcionó en versiones anteriores del compilador. Sin embargo, la especificación C# 4 deja esto bastante claro. Sección 2.5.8.1 establece que:

Un #pragma warning restore Directiva restaura la totalidad o el conjunto dado de advertencias al estado que estaba en vigor al comienzo de la unidad de compilación. Tenga en cuenta que si una advertencia en particular se deshabilitó externamente, un #pragma warning restore (ya sea para todos o para la advertencia especificada) no volverá a habilitar esa advertencia.

Jeff tiene un workaround in a blog post - básicamente para reprocesar el código autogenerado como parte de la compilación.


Como dice Tom, se puede añadir una "ignorar" a todo el proyecto (Build/reprimir Advertencias - entrar en 1591 como el número de aviso) - pero entonces se puede restaurar el mismo aviso en la parte superior de cada uno de sus archivos que no son generados:

#pragma warning restore 1591 

es bastante feo, pero funciona (yo sólo lo he probado).

+0

@TomTom : ¿En qué manera? Puede automatizar fácilmente una comprobación de que tiene ese pragma al inicio de cada archivo no generado. (Es muy probable que el OP ya tenga algo que verificar para las declaraciones de derechos de autor, etc., que podría modificarse fácilmente para incluir ese pragma). El resultado final es lo que quiere el OP: errores para archivos escritos a mano que no tienen comentarios XML. y no hay tales errores para los archivos generados. –

+0

Aceptando esto como la respuesta que todos los demás no resuelven el problema de no tocar el archivo generado ... bien, Jon –

+1

@Jon: Esto no funciona para C# 4. Según la especificación, si la advertencia es global deshabilitado (es decir, por el proyecto), restaurar restaurará a ese estado global (es decir, deshabilitado). Debo añadir, lo probé (no solo leí las especificaciones). –

2

Lo mejor que podrá hacer en esto es suprimir la advertencia particular en el proyecto que contiene el código generado. Puede hacer esto en Propiedades del proyecto en la pestaña Construir. No es ideal, pero a menos que pongas las pragmas en el código generado, es lo mejor que puedes hacer.

9

La mejor manera de evitar que tienen advertencias o errores de análisis de código en el código generado es para decorar sus clases generadas con el GeneratedCodeAttribute y hacer que el archivo de código termina con el patrón * .generated.cs.

Si los archivos de código también tienen un encabezado de archivo, debe tenía las siguientes etiquetas:

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

Esto no es obligatorio, pero si usted tiene cabecera del archivo de código es una buena práctica.

De esta manera, FxCop y otras herramientas como StyleCop ya no analizarán su código.

Lo anormal es que su herramienta de generación de código no está decortating sus elementos de código con el atributo mencionado anteriormente. Intente ver si hay una opción para activar en la configuración de su herramienta o póngase en contacto con el equipo en desarrollo.


EDIT: ¿El clases generadas son clases parciales y el nombre real de las clases y el número de cambios de frecuencia? Porque si el contenido del código generado no se mueve mucho, lo único que puede hacer es simplemente crear otro archivo de código y simplemente declarar la clase parcial generada para decorarlos con GeneratedCodeAttribute. Una vez me salvó la vida (¡y mi tiempo!).

+1

"No influyo en el archivo real generado": no es esa la regla esta respuesta? –

+0

Entiendo cuál es el problema, tuve exactamente el mismo problema con una DSL proveniente de Codeplex. El hecho es que si a menudo se regenera, no quiere modificarlo manualmente cada vez. Lo que hice fue eso Me puse en contacto con el desarrollador de Codeplex que solucionó el problema. En realidad, hay dos soluciones: buscar una configuración para habilitar en la herramienta o contactar al equipo en desarrollo. – Ucodia

+0

@TomTom (y @TheRHCP): como señala Jon, no puedo controlar el código generado así que no va en agregar atributos Además, las clases parciales pueden resolver los comentarios que faltan en la clase, pero no ayudan en mis propiedades/métodos ... –

Cuestiones relacionadas