2010-04-30 24 views
12

Hemos comenzado un nuevo proyecto pero también tenemos este problema para un proyecto existente. El problema es que cuando se compila con un nivel de advertencia de 4 también queremos cambiar elIgnorar archivos generados al usar "Tratar advertencias como errores"

'tratar a todos los avisos como errores'

No somos capaces de hacer esto en el momento porque los archivos generados (en referencia particular archivos .cs) faltan cosas como comentarios XML y esto genera una advertencia, no queremos suprimir las advertencias de comentarios xml totalmente fuera de todos los archivos solo para tipos específicos de archivos (a saber, código generado).

He pensado en una forma de lograr esto, pero no estoy seguro de si esta es la mejor manera de hacerlo o de dónde empezar :) Mi idea es que tenemos que hacer algo con las plantillas T4 para el código que se genera de tal manera que completa la documentación XML del código generado.

¿Alguien tiene alguna idea, actualmente estoy en más de advertencias (2k es un gran proyecto) :(

+0

Puede establecer las propiedades de los archivos fuente individuales, incluidas las opciones del compilador para los archivos fuente individuales. Aquellos anularán las propiedades heredadas del nivel del proyecto. –

+0

¿De verdad? ¿¿¿¿Cómo???? – erikkallen

+0

Hice un comentario sobre lo anterior, pero sí, ¿cómo es esto logrado, podría dar un ejemplo, por favor. –

Respuesta

4

He escrito un script de PowerShell que llama a svcutil y luego ajusta el código generado automáticamente con las directivas #pragma para ignorar el xml faltante, pero aún me permite regenerarlo según sea necesario.

$outFile = 'generatedCode_fromSVCUTIL.cs' 
svcutil '..\XML Schema\myXsd.xsd' /dataContractOnly /n:'*,MyNamespace.GeneratedCode' /language:C# /importxmltypes /out:$outFile 

# ----------------------------------------------------- 
# Exempt this file from XML documentation requirements 

Write-Host 'Wrapping ', $outFile, ' in #pragma 1591 flags' 
$a = Get-Content $outFile 

# Set up pragma lines for enabling and disabling the XML doc warning 
$disableWarning = '#pragma warning disable 1591' 
$restoreWarning = '#pragma warning restore 1591' 

# wrap the generated code in the pragma tags 
Set-Content $outFile –value $disableWarning, $a, $restoreWarning 
Write-Host 'Done.' 
+0

solución mucho mejor esto. Cambié esto como la respuesta aceptada ya que no implica cambiar la visibilidad de los objetos. –

5

Puede desactivar selectivamente las advertencias con un pragma:

// Disable warning messages 4507 and 4034. 
#pragma warning(disable : 4507 34) 

Si es posible emitir este tipo de advertencias (o un # include) en los archivos de código generados, ya está hecho

Como alternativa, puede desactivar globalmente en la línea de comandos para el compilador:.

/wd4326 disables compiler warning C4326. 

A continuación, volver a activarlos (a través de un archivo de cabecera) en los archivos de las quieres para:

// Report warning 4326 as an error. 
#pragma warning(error : 326) 

Por último, puede configurar diferentes opciones de compilación para cada archivo de origen mediante la alteración de las propiedades en el archivo de proyecto . Personalmente encuentro que es una pesadilla de mantenimiento, pero a veces no tienes otra opción.

Editar: Veo que sus archivos de origen son C#, no C++.

# Uso de la línea de comandos C:

to suppress CS0028, you could specify /nowarn:28. 

Desafortunadamente, /warnaserror hace todo advertencias errores.

+0

Es interesante, usted dice que al igual que (programador de Windows) que puede alterar las propiedades por archivo de origen en las propiedades .csproj, no puedo encontrar cómo se logra esto. ¿Esto se hace en el cuadro de texto Suprimir advertencias: texto? para ser sincero, quiero ignorar el código generado. –

+0

Me temo que tendrá que usar el compilador de línea de comandos C# (csc.exe). – egrunin

+0

La idea es que una vez que haya agregado la advertencia de #pragma, esté configurado. Solo tienes que actualizar el generador de código una vez. ¿Tienes opción de cambiar el generador de código? –

1

para C# sólo tiene que colocar una

#pragma warning disable 1591 

al comienzo del archivo reference.cs. A continuación, no se emitirá la advertencia sobre la documentación XML faltante.

Pero tiene que hacer esto cada vez, el archivo se regenera (es decir, cuando cambia la definición de su servicio). No tengo conocimiento de ninguna forma de influir en la generación de código (no estoy seguro de si usan plantillas T4 o dónde podrían ubicarse ...)

+0

sí, ese es más bien el problema Es una pesadilla de mantenimiento tener que hacerlo cada vez, de nuevo parece útil, pero me gustaría que se pusiera en todo momento si fuera posible. –

0

Un par de ideas.

1) ¿Tiene la etiqueta autogenerada en su cabecera del archivo (comentarios en la parte superior del archivo), así:

// <auto-generated>

// This file is auto-generated...

// </auto-generated>

Esta etiqueta es importante (los contenidos no lo son), ya que algunas herramientas omiten dichos archivos (p. ej., StyleCop puede configurarse para ignorar estos archivos).

2) Si está autogenerando código, ¿por qué no autogenerar al menos algunos comentarios XML? Puedo entender que no quieras pasar mucho tiempo documentando código que probablemente nunca se leerá, pero cuando depuro el código, a menudo me encuentro recurriendo a un proxy autogenerado e incluso un simple comentario puede ser útil, incluso Si sólo dice "código autogenerado" :)

Editar

3) también puede suprimir advertencias mediante la adición de los pragmas a las opciones de generación (clic derecho en el proyecto, seleccione propiedades, seleccione la pestaña Build) Esto es más conveniente que agregar al código. Intente agregar 1591;1574;1587 al cuadro Suprimir advertencias.

4) Puede acceder a la pestaña Análisis de código en Propiedades del proyecto y desmarque "Tratar advertencia como error" para conocer las advertencias específicas que le causan problemas.

Obviamente, ambas son configuraciones globales, no solo seleccionan los archivos autogenerados.

+0

Me temo que esto no resuelve el problema, Visual Studio al generar la documentación parece ignorar el hecho de que estos encabezados existen. –

+0

OK, agregué otro pensamiento a mi lista :) –

+0

No entiendo por qué este voto atraído hacia abajo, ¿podría el infractor por lo menos tener la cortesía de dejar un comentario que diga qué le pasó a esta respuesta? –

2

En VS 2010 puede hacer clic con el botón derecho en la referencia del servicio, seleccionar 'Configurar referencia de servicio ...' y cambiar el modificador de acceso de Público a Interno.
Esto, por supuesto, puede no ser apropiado para su solución en particular, pero las advertencias no son aplicables a los métodos internos y aún puede volver a generar la referencia del servicio.

Cuestiones relacionadas