Pregunta

He heredado una aplicación grande de ASP.NET heredada donde trabajo, y nuestra compañía quiere que usemos FXCOP y solucionemos todas las violaciones importantes de reglas. Actualmente una regla que parece ser prevalente es lo siguiente:

CA1405: COM Tipo de tipo visible Los tipos de base deben ser visibles < / p>

Parece que cada página / control de ASP.NET en nuestra aplicación está violando esta regla. No estaba seguro de por qué al principio, pero eventualmente me di cuenta de que se debe a la siguiente cadena de herencia:

System.IDisposable
  → System.Web.UI.Control
    → System.Web.UI.TemplateControl
      → System.Web.UI.Page

También me di cuenta de que IDisposable se define como:

[ComVisible(true)]
public interface IDisposable
{
  void Dispose();
}

Para resumir: todas las páginas / controles de ASP.NET heredal de IDisposable, y IDisposable tiene el atributo [ComVisible(true)], lo que significa que todas las páginas / controles fallarán esta regla.

Esto nos está perjudicando porque nuestra aplicación tiene miles de páginas y controles, y así miles de violaciones. Deshabilitar la regla no es una opción, ya que tenemos un conjunto de "estándar de la compañía" de reglas FXCOP. Parece que Fxcop quiere que pasemos por nosotros y ponmos este atributo en cada página en nuestra solicitud, que realmente no estoy interesada en hacer.

Mi pregunta es, ¿por qué IDisposable tiene el atributo [ComVisible(true)] en primer lugar?

¿Fue útil?

Solución

IDisponable está marcado como cómodo para permitir la eliminación de recursos cuando se usa un componente .NET en una aplicación COM.

Realmente utilizamos esto en gran medida cuando la transición de una aplicación VB6 a una aplicación .NET completa: pudimos reutilizar la funcionalidad .NET (acceso a la base de datos) en la aplicación AA Legacy VB6, pero tuvo que usar la interfaz de IDIsPose para garantizar que las cosas talesComo las conexiones de la base de datos se limpiaron correctamente cuando terminamos usando el objeto.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top