StyleCop和FxCop规则相互排斥

RaY*_*ell 5 .net c# fxcop coding-style stylecop

我正在使用StyleCop和FxCop工具来改进我的代码,但我来到了一个有两个规则的地方,一个在StyleCop中,另一个在FxCop中相互排斥.如果我修复我的代码以匹配StyleCop中的规则,则FxCop验证失败,反之亦然.

第一个规则是StyleCop的SA1200,它表示所有using指令必须放在命名空间内.

所有using指令必须放在命名空间内.

所以我做了类似的事情

namespace MyNamespace
{
    using System;

    ...
}
Run Code Online (Sandbox Code Playgroud)

StyleCop没问题,没有更多的警告.现在我运行FxCop验证,它告诉我CA1014被违反:

使用CLSCompliant标记'MyApp.dll'(true),因为它公开了外部可见类型.

要解决这个问题,我应该这样做:

[ClsCompliant(true)]
namespace MyNamespace
{
    ...
}
Run Code Online (Sandbox Code Playgroud)

但现在我无法构建我的项目,因为ClsCompliant属性未被识别(因为它来自System我包含在其中的命名空间MyNamespace).所以,如果我using System;MyNamespace声明之外移动指令.这将使我的代码编译,但它将再次破坏StyleCop的规则.

有没有办法处理这个问题,除了禁用StyleCop或FxCop中的一个规则?如果不可能我禁用哪个规则?哪个不太重要?

mac*_*kow 15

使用完整属性名称:

[System.CLSCompliant(true)]
namespace MyNamespace
{
    ...
}
Run Code Online (Sandbox Code Playgroud)

顺便说一句:如果你想把你的整个程序集标记为CLSCompliant,请放

[assembly: System.CLSCompliant(true)]
Run Code Online (Sandbox Code Playgroud)

在Properties/AssemblyInfo.cs文件中

  • 我认为程序集应该标记为CLSCompliant,因为maciejkow指出而不是标记命名空间. (4认同)