我正在使用StyleCop和FxCop工具来改进我的代码,但我来到了一个有两个规则的地方,一个在StyleCop中,另一个在FxCop中相互排斥 . 如果我修复我的代码以匹配StyleCop中的规则,则FxCop验证失败,反之亦然 .
第一个规则是StyleCop的SA1200,它表示所有using指令必须放在命名空间内 .
所有using指令必须放在命名空间内 .
所以我做了类似的事情
namespace MyNamespace
{
using System;
...
}
StyleCop没问题,没有更多的警告 . 现在我运行FxCop验证,它告诉我CA1014被违反:
使用CLSCompliant标记'MyApp.dll'(true),因为它公开了外部可见类型 .
要解决这个问题,我应该这样做:
[ClsCompliant(true)]
namespace MyNamespace
{
...
}
但现在我无法构建我的项目,因为 ClsCompliant
属性未被识别(因为它来自 System
命名空间,我包含在 MyNamespace
内) . 所以,如果我在 MyNamespace
声明之外移动 using System;
指令 . 这将使我的代码编译,但它将再次破坏StyleCop的规则 .
有没有办法处理这个问题,除了禁用StyleCop或FxCop中的一个规则?如果不可能我禁用哪个规则?哪个不太重要?
2 回答
使用完整属性名称:
顺便说一句:如果你想把你的整个程序集标记为CLSCompliant,请放
在Properties / AssemblyInfo.cs文件中
我的建议是关闭“所有使用指令必须放在命名空间内” . StyleCop中的规则 . 坚持它是不切实际的,特别是因为大多数代码生成器(甚至VS自己的代码生成器)都不遵循这种做法 .