2009-09-03 14 views
5

私はコードを改善するためにStyleCopとFxCopツールを使用していますが、StyleCopとFxCopには2つのルールがあります。 StyleCopのルールと一致するようにコードを修正すると、FxCopの検証は失敗し、その逆もあります。StyleCopとFxCopのルールはお互いに除外

最初のルールは、使用するすべてのディレクティブを名前空間の内側に配置する必要があることを示すStyleCopのSA1200です。

使用するすべてのディレクティブは、名前空間の内側に配置する必要があります。

だから私は、それはStyleCop、これ以上の警告についてはOKだったこの

namespace MyNamespace 
{ 
    using System; 

    ... 
} 

のようなものを行っています。今度はFxCop検証を実行し、CA1014が違反していると伝えます。

外部から見えるタイプを公開するため、CLOCKompliant(true)で 'MyApp.dll'をマークしてください。私はこのような何か行う必要があり、これを解決するには

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

をしかしClsCompliant属性が認識されないので(それは私がMyNamespaceの内側に含まSystem名前空間からだから)今、私は私のプロジェクトをビルドすることはできません。だからusing System;指令をMyNamespace宣言の外に移動すると。これは私のコードをコンパイルしますが、再びStyleCopからルールを破ります。

StyleCopまたはFxCopのいずれかのルールを無効にすること以外は、この問題に対処する方法はありますか?それが不可能な場合、どのルールを無効にする必要がありますか?それはあまり重要ではありませんか?

答えて

15

使用フル属性名:ところで

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

:あなたがCLSCompliantとして、あなたのアセンブリ全体をマークしたい場合は、

+4

アセンブリには、名前空間に準拠する代わりに、maciejkowが指摘したようにCLSCompliantとマークする必要があります。 –

3

私の提案を提出プロパティ/ AssemblyInfo.csに

[assembly: System.CLSCompliant(true)] 

を置きます「すべてのディレクティブを名前空間内に配置する必要があります」をオフにすることです。 StyleCopのルール特にコードジェネレータのほとんど(この場合でもVS独自のもの)がこのプラクティスに従わないので、それを遵守することは実際的ではありません。

+0

私は、単に生成されたファイルを無視するようにStyleCopを設定する方が良いと思います。 – RaYell

+2

はい、適切な属性でマークされています。残念ながら、コードジェネレータの中には、生成されたコードをマークしないものがあります。 –

関連する問題