Вопрос

Я унаследовал большое устаревшее приложение ASP.NET, в котором работаю, и наша компания хочет, чтобы мы использовали FxCop и исправляли все основные нарушения правил.В настоящее время преобладающим правилом является следующее:

СА1405:Базовые типы видимого типа COM должны быть видимыми COM.

Похоже, что каждая страница/элемент управления 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)] атрибут в первую очередь?

Это было полезно?

Решение

IDisposable помечен как COMVisible, чтобы разрешить удаление ресурсов, когда компонент .Net используется в COM-приложении.

На самом деле мы активно использовали это при переходе от приложения VB6 к полноценному приложению .Net:мы смогли повторно использовать функциональность .Net (доступ к базе данных) в устаревшем приложении VB6, но нам пришлось использовать интерфейс IDispose, чтобы гарантировать правильную очистку таких вещей, как соединения с базой данных, когда мы закончили использовать объект.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top