1

我正在开发一个 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?

4

1 回答 1

1

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

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

这些规则并不是真的相互矛盾,它们只是不太清楚它们向你提出的建议。

于 2012-05-21T17:44:45.427 回答