我正在使用 StyleCop 和 FxCop 工具来改进我的代码,但我遇到了一个有两条规则的地方,一条在 StyleCop 中,一条在 FxCop 中,它们相互排斥。如果我修复我的代码以匹配来自 StyleCop 的规则,则 FxCop 验证失败,反之亦然。
第一条规则是来自 StyleCop 的 SA1200,它说所有 using 指令都必须放在命名空间内。
所有 using 指令都必须放在命名空间内。
所以我做了这样的事情
namespace MyNamespace
{
using System;
...
}
StyleCop 没问题,没有更多警告。现在我运行 FxCop 验证,它告诉我违反了 CA1014:
用 CLSCompliant(true) 标记“MyApp.dll”,因为它公开了外部可见的类型。
为了解决这个问题,我应该这样做:
[ClsCompliant(true)]
namespace MyNamespace
{
...
}
但现在我无法构建我的项目,因为ClsCompliant
无法识别属性(因为它来自System
我包含在MyNamespace
. 因此,如果我将using System;
指令移到MyNamespace
声明之外。这将使我的代码编译,但它会再次违反 StyleCop 的规则。
除了禁用 StyleCop 或 FxCop 中的规则之一,还有什么办法可以解决这个问题?如果这不可能,我应该禁用哪些规则?哪个不太重要?