首页 文章

StyleCop和FxCop规则相互排斥

提问于
浏览
5

我正在使用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 回答

  • 15

    使用完整属性名称:

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

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

    [assembly: System.CLSCompliant(true)]
    

    在Properties / AssemblyInfo.cs文件中

  • 3

    我的建议是关闭“所有使用指令必须放在命名空间内” . StyleCop中的规则 . 坚持它是不切实际的,特别是因为大多数代码生成器(甚至VS自己的代码生成器)都不遵循这种做法 .

相关问题