6

コードを改善するために StyleCop と FxCop ツールを使用していますが、StyleCop と FxCop の 2 つのルールが存在する場所に行き着きました。StyleCop のルールに一致するようにコードを修正すると、FxCop の検証が失敗し、その逆も同様です。

最初のルールは StyleCop の SA1200 で、すべての using ディレクティブは名前空間内に配置する必要があると述べています。

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

だから私はこのようなことをしました

namespace MyNamespace
{
    using System;

    ...
}

StyleCop では問題ありませんでした。警告はなくなりました。ここで FxCop 検証を実行すると、CA1014 に違反していることがわかります。

'MyApp.dll' を CLSCompliant(true) でマークします。これは、外部から見える型を公開するためです。

これを解決するには、次のようにする必要があります。

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

ClsCompliantしかし、属性が認識されないため、プロジェクトをビルドできません( のSystem中に含まれる名前空間からのものであるためMyNamespace)。したがって、using System; ディレクティブをMyNamespace宣言の外に移動すると。これにより、コードがコンパイルされますが、StyleCop のルールが破られます。

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

4

2 に答える 2

15

完全な属性名を使用します:

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

ところで:アセンブリ全体をCLS準拠としてマークする場合は、

[assembly: System.CLSCompliant(true)]

Properties/AssemblyInfo.csファイル内

于 2009-09-03T07:41:51.033 に答える
3

私の提案は、「すべての using ディレクティブは名前空間内に配置する必要があります」をオフにすることです。StyleCop のルール。特にほとんどのコード ジェネレーター (VS 独自のジェネレーターを含む) がこの慣行に従っていないため、これに従うことは実際的ではありません。

于 2009-09-12T05:01:30.190 に答える