【问题标题】:Disable Stylecop on single code line (the namespace)在单个代码行(命名空间)上禁用 Stylecop
【发布时间】:2013-09-24 05:40:35
【问题描述】:

我们有一个现有的产品,我们希望在其中实现 StyleCop 的使用。 但是,我们有一个问题,那就是我们所有的命名空间都以小写字母开头(例如lowerCase.UpperCase.Etc.Etc.),这当然导致 SA1300(元素必须以大写字母开头)规则在每​​个文件中都被破坏。

尽管此时无法更改命名空间,因为它已经存在,而且我们有许多合作伙伴和客户已经针对我们的 api 实现了接口并且依赖于稳定的命名空间。我确定您了解更改的后果...

我们希望在一般情况下启用规则,但在命名空间行上暂时禁用。 尝试过:

[module: System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.NamingRules", "SA1300:ElementMustBeginWithUpperCaseLetter", Justification = "Reviewed. Suppression is OK here.")]

如果我把它放在命名空间行上方它会起作用,但是它基本上会完全禁用规则,这不是我们想要的,因为我们喜欢类和类成员的规则......

我想要类似的东西:

#pragma warning disable SA1300
namespace lowerCase.UpperCase.Etc
{
#pragma warning enable SA1300

但据我所知,SA1300 不是这种类型的警告。

有人对如何解决这个问题有一些想法吗?

提前致谢!

【问题讨论】:

    标签: c# namespaces stylecop suppress-warnings


    【解决方案1】:

    有一个解决方法。

    你可以这样写:

    #region Generated Code
    namespace lowerCase.UpperCase.Etc
    {
    #endregion

    按照设计,Stylecop 将忽略该区域内的所有内容,因为您在此声明“您不拥有代码,因此不能对样式负责”强>。

    不过要注意一点:区域内的所有规则都将被忽略,因此在设置区域之前,请确保您只有“不需要”的规则。

    这实际上是对另一个问题的一个小评论(甚至不是答案):Disable StyleCop for specific lines

    【讨论】:

      【解决方案2】:

      不幸的是,您想要做的事情是不可能的。但是,StyleCop+ 包含一个更灵活的命名规则版本,它允许您为命名空间名称指定与其他名称不同的格式。

      【讨论】:

      • 嗯......你在某种程度上是对的,但在运气好之后,我似乎找到了基于另一个类似问题的评论的解决方法。已将其作为答案发布在这里。耶! :)
      • 您是否更愿意使用可配置的规则,而不是用这种方式注释您的每一个命名空间声明?
      • imo,StyleCop+ 搞砸了许多普通的 stylecop 规则...正如我所提到的,无论如何我们都需要检查所有文件,因此设置区域解决方法并不是什么大问题。跨度>