Global.asax - FxCop 警告冲突 CA1811 与 CA2109

Posted

技术标签:

【中文标题】Global.asax - FxCop 警告冲突 CA1811 与 CA2109【英文标题】:Global.asax - FxCop Warning Conflict CA1811 vs CA2109 【发布时间】:2012-05-21 17:34:07 【问题描述】:

我正在开发一个 ASP.NET 项目。投影当然有一个 Global.asax 文件。在 Global.asax.cs 文件中,它包含以下每个方法,[Application_Start 除外] 并非真正为空,但不需要实际实现:

protected void Application_Start(object sender, EventArgs e) 
protected void Session_Start(object sender, EventArgs e) 
protected void Session_End(object sender, EventArgs e) 
protected void Application_Error(object sender, EventArgs e) 

我一直在慢慢启用 Visual Studio 2008 必须提供的每个 FxCop 规则,最近遇到了与上述方法有关的冲突。我遇到的第一个错误是 CA2109

CA2109 : Microsoft.Security : Consider making 'Global.Application_Error(object, EventArgs)' not externally visible.

每个方法都会显示此错误。由于我没有手动调用任何这些方法,因此我可以通过将每个方法设置为private 来消除此警告。执行此操作并重新运行代码分析后,我收到错误 CA1811:

CA1811 : Microsoft.Performance : 'Global.Application_Error(object, EventArgs)' appears to have no upstream public or protected callers. 

我对 Stack Overflow 社区世界中的所有人的问题是:我应该听哪个警告,应该禁止哪个警告?有没有办法同时满足这两个警告?

我是否正确假设安全胜过一切,因此我应该听 CA2109 并抑制 CA1811?

【问题讨论】:

【参考方案1】:

CA1811 实际上是“避免未调用的私有代码”。这意味着 FXCop 认为它们没有被调用,因为没有明确的事件绑定。 Auto Event Wire Up 意味着它们被调用并且可以禁止此规则,或者您可以显式处理具有相同效果的事件。

“CA2109:查看可见事件处理程序”有点说同样的话。它知道它们是事件处理程序,但说为什么它们需要在类外可见?

这些规则其实并不矛盾,只是它们对你的建议不是很清楚。

【讨论】:

以上是关于Global.asax - FxCop 警告冲突 CA1811 与 CA2109的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET MVC中的Global.asax文件

使用 global.asax 都有哪些替代方法?

Global.asax调试

如何在global.asax中注册Automapper配置类?

asp.net mvc global.asax文件详解

error CS0433: The type global_asax exists in both App_global.asax