2009-09-03 12 views
5

Estoy usando herramientas StyleCop y FxCop para mejorar mi código, pero llegué a un lugar donde hay dos reglas, una en StyleCop y otra en FxCop que se excluyen entre sí. Si arreglo mi código para que coincida con la regla de StyleCop, la validación de FxCop falla y viceversa.Las reglas de StyleCop y FxCop se excluyen entre sí

La primera regla es SA1200 de StyleCop que dice que todas las directivas que se usan deben colocarse dentro del espacio de nombres.

Todas las directivas que se usan deben colocarse dentro del espacio de nombres.

así que he hecho algo como esto

namespace MyNamespace 
{ 
    using System; 

    ... 
} 

estaba bien para StyleCop, sin más advertencias. Ahora corro validación FxCop y me dice que es violada CA1014:

Marcos MyApp.dll 'con CLSCompliant (verdadero) ya que expone los tipos visibles externamente.

Para resolver esto lo debe hacer algo como esto:

[ClsCompliant(true)] 
namespace MyNamespace 
{ 
    ... 
} 

pero ahora no puedo construir mi proyecto porque ClsCompliant atributo no es reconocido (porque es de System espacio de nombres que incluyo en el interior de la MyNamespace) . Entonces, si muevo la directiva using System; fuera de la declaración MyNamespace. Esto hará que mi código se compile, pero nuevamente romperá la regla de StyleCop.

¿Hay alguna manera de resolver este problema, excepto para deshabilitar una de las reglas en StyleCop o FxCop? Y si eso no es posible, ¿cuál de las reglas debería deshabilitar? ¿Cuál es menos importante?

Respuesta

15

Uso completa nombre del atributo:

[System.CLSCompliant(true)] 
namespace MyNamespace 
{ 
    ... 
} 

Por cierto: si desea marcar toda su ensamblaje en CLSCompliant, pone

[assembly: System.CLSCompliant(true)] 

en Propiedades/AssemblyInfo.cs archivo

+4

Creo que el conjunto debe marcarse CLSComplementario como señaló maciejkow en lugar de marcar el espacio de nombres. –

3

Mi sugerencia es desactivar "Todas las directivas de uso deben colocarse dentro del espacio de nombres". regla en StyleCop. No es práctico adherirse a él, especialmente porque la mayoría de los generadores de código (incluso los propios) no siguen esta práctica.

+0

Creo que es mejor configurar StyleCop para simplemente ignorar los archivos generados. – RaYell

+2

Sí, si están marcados con el atributo apropiado. Desafortunadamente, algunos de los generadores de código no marcan el código generado. –

Cuestiones relacionadas