Pergunta

Herdei um grande aplicativo ASP.NET legado onde trabalho e nossa empresa deseja que usemos o FxCop e corrijamos todas as principais violações de regras.Atualmente, uma regra que parece prevalecer é a seguinte:

CA1405:Os tipos base de tipo visível COM devem ser visíveis COM

Parece que todas as páginas/controles ASP.NET em nosso aplicativo estão violando esta regra.Eu não tinha certeza do porquê no começo, mas finalmente percebi que isso se devia à seguinte cadeia de herança:

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

Eu também percebi IDisposable é definido como:

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

Para resumir:todas as páginas/controles ASP.NET herdam de IDisposable, e IDisposable tem o [ComVisible(true)] atributo, o que significa que todas as páginas/controles falharão nesta regra.

Isso está nos prejudicando porque nosso aplicativo possui milhares de páginas e controles e, portanto, milhares de violações.Desativar a regra não é uma opção, pois temos um conjunto de regras FxCop “padrão da empresa”.Parece que o FxCop quer que coloquemos esse atributo em cada página do nosso aplicativo, o que realmente não estou interessado em fazer.

Minha pergunta é: por que IDisposable tenha o [ComVisible(true)] atributo em primeiro lugar?

Foi útil?

Solução

IDisposable é marcado como COMVisible para permitir o descarte de recursos quando um componente .Net é usado em um aplicativo COM.

Na verdade, usamos muito isso ao fazer a transição de um aplicativo VB6 para um aplicativo .Net completo:conseguimos reutilizar a funcionalidade .Net (acesso ao banco de dados) em um aplicativo VB6 herdado, mas tivemos que usar a interface IDispose para garantir que coisas como conexões de banco de dados fossem limpas corretamente quando terminamos de usar o objeto.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top