我继承了我工作的大型遗留ASP.NET应用程序,我们公司希望我们使用FxCop并修复所有主要规则违规。目前似乎普遍存在的规则如下:
CA1405: COM visible type base types should be COM visible
我们的应用程序中的每个ASP.NET页面/控件似乎都违反了此规则。起初我不知道为什么,但最终我意识到这是由于以下的继承链:
System.IDisposable → System.Web.UI.Control → System.Web.UI.TemplateControl → System.Web.UI.Page
我也意识到IDisposable
被定义为:
[ComVisible(true)]
public interface IDisposable
{
void Dispose();
}
总结一下:所有ASP.NET页面/控件都继承自IDisposable
,IDisposable
具有[ComVisible(true)]
属性,这意味着所有页面/控件都将失败此规则。
这对我们造成了伤害,因为我们的应用程序有数千个页面和控件,因而有数千个违规行为。禁用规则不是一种选择,因为我们有一套“公司标准”FxCop规则。似乎FxCop希望我们通过并将此属性放在我们的应用程序中的每个页面上,我真的不感兴趣。
我的问题是,为什么IDisposable
首先拥有[ComVisible(true)]
属性?
答案 0 :(得分:3)
IDisposable被标记为COMVisible,以便在COM应用程序中使用.Net组件时可以处置资源。
在从VB6应用程序转换到完整的.Net应用程序时,我们实际上使用了这个:我们能够在传统的VB6应用程序中重用.Net功能(数据库访问),但必须使用IDispose接口来确保当我们使用该对象时,正确清理了数据库连接。