【问题标题】:StyleCop SP0100 error for Application_Start in Global.asaxGlobal.asax 中 Application_Start 的 StyleCop SP0100 错误
【发布时间】:2023-05-23 04:16:01
【问题描述】:

Style cop 将尝试强制您在 mvc Web 应用程序的 Global.asax 文件中的 Application_Start 中去掉下划线:

SP0100:方法(通用)名称 Application_Start 不符合 指定样式:SampleName。

但如果不破坏 Web 应用程序(我认为?),则无法更改此名称。

我在编写禁止消息以绕过此规则时遇到问题,并且由于某种原因,stylecop 中的分析器未找到此错误 [编辑 - 未找到错误,因为它是 StyleCop+ 错误] - 所以我无法自动生成模块级抑制消息。

有人可以帮助使用正确的抑制消息来解决这个问题吗?

我已经尝试了一些类似的东西:

[module: SuppressMessage("StyleCopPlus.StyleCopPlusRules", "SP0100:AdvancedNamingRules", Scope="member", Target="Global.asax", Justification = "Some justification")]

但没有运气

【问题讨论】:

  • 如果您删除 ScopeTarget 属性,它(全局)是否有效?我知道这不是您想要的,但答案可能有助于找到解决方案。
  • 还没有尝试过,我不认为但确实通过将抑制直接放在 Application_Start() 上方来使其工作
  • 啊,好吧。很高兴你把它整理好了。我建议您自己输入该答案并将其标记为正确。这将使其他人在遇到相同问题时更容易找到解决方案。
  • 仍然希望得到比我更好的答案,但如果没有发布任何其他内容,我会在一两天后提出来

标签: c# asp.net-mvc-3 stylecop application-start suppressmessage


【解决方案1】:

首先,StyleCop 抑制确实很难记住,但最简单的方法是在您的方法之前或在整个类之前使用它们。在您的情况下,抑制属性将如下所示:

[SuppressMessage("StyleCopPlus.StyleCopPlusRules", "SP0100:AdvancedNamingRules", Justification = "Global ASAX method.")]

其次,StyleCop+ 目前无法检测 Global ASAX 方法,因此将其视为常用方法并应用相应规则。鉴于此,您可能可以对“方法(通用)”使用以下命名规则:

$(AaBb)
Application_$(AaBb)
Page_$(AaBb)
Session_$(AaBb)

这里的缺点是不会违反Application_DoWork方法,即使它与Global ASAX无关。

最后,您可以向 StyleCop+ 提交问题,以便它可以区分 Global ASAX 方法并对其应用单独的命名规则。

【讨论】:

  • 是 Oleg 任何地方的 StyleCop+ 抑制列表吗?