2009-09-03 9 views
5

J'utilise les outils StyleCop et FxCop pour améliorer mon code mais je suis arrivé à un endroit où il y a deux règles, une dans StyleCop et une dans FxCop qui s'excluent mutuellement. Si je corrige mon code pour qu'il corresponde à la règle de StyleCop, la validation FxCop échoue et vice versa.Les règles StyleCop et FxCop s'excluent

La première règle est SA1200 de StyleCop qui dit que toutes les directives d'utilisation doivent être placées à l'intérieur de l'espace de noms.

Toutes les directives d'utilisation doivent être placées à l'intérieur de l'espace de noms.

donc je l'ai fait quelque chose comme ça

namespace MyNamespace 
{ 
    using System; 

    ... 
} 

Il était ok pour StyleCop, pas plus d'avertissements. Maintenant, je lance la validation FxCop et il me dit que CA1014 est violé:

Marquez 'MyApp.dll' avec CLSCompliant (true) car il expose les types visibles à l'extérieur.

Pour résoudre ce que je devais faire quelque chose comme ceci:

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

mais maintenant je ne peux pas construire mon projet parce que ClsCompliant attribut n'est pas reconnu (car il est l'espace de nom System que j'inclus à l'intérieur de la MyNamespace) . Donc, si je déplace la directive using System; en dehors de la déclaration MyNamespace. Cela fera compiler mon code mais encore une fois il va casser la règle de StyleCop.

Y at-il un moyen de résoudre ce problème, sauf pour désactiver l'une des règles dans StyleCop ou FxCop? Et si ce n'est pas possible, quelles règles devrais-je désactiver? Lequel est moins important?

Répondre

15

Utiliser le nom d'attribut complet:

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

BTW: si vous voulez marquer votre assemblée comme CLSCompliant, mettez

[assembly: System.CLSCompliant(true)] 

dans le fichier Propriétés/AssemblyInfo.cs

+4

Je pense que l'ensemble devrait être marqué CLSC conforme comme maciejkow a souligné au lieu de marquer l'espace de noms conforme. –

3

Ma suggestion est d'éteindre le "Toutes les directives d'utilisation doivent être placées à l'intérieur de l'espace de noms." règle dans StyleCop. Il n'est pas pratique d'y adhérer, d'autant plus que la plupart des générateurs de code (même ceux de VS) ne suivent pas cette pratique.

+0

Je pense qu'il est préférable de paramétrer StyleCop pour simplement ignorer les fichiers générés. – RaYell

+2

Oui, s'ils sont marqués avec l'attribut approprié. Malheureusement, certains générateurs de code ne marquent pas le code généré. –

Questions connexes