Question

J'ai hérité d'une grande application ASP.NET héritée sur laquelle je travaille, et notre entreprise souhaite que nous utilisions FxCop et corrigions toutes les violations majeures des règles.Actuellement, une règle qui semble prévaloir est la suivante :

CA1405 :Les types de base de type visible COM doivent être visibles COM

Il semble que chaque page/contrôle ASP.NET de notre application enfreint cette règle.Au début, je ne savais pas pourquoi, mais j'ai finalement réalisé que cela était dû à la chaîne d'héritage suivante :

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

J'ai aussi réalisé IDisposable est défini comme:

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

Résumer:toutes les pages/contrôles ASP.NET héritent de IDisposable, et IDisposable a la [ComVisible(true)] attribut, ce qui signifie que toutes les pages/contrôles échoueront à cette règle.

Cela nous fait du mal car notre application comporte des milliers de pages et de contrôles, et donc des milliers de violations.La désactivation de la règle n'est pas une option, car nous disposons d'un ensemble de règles FxCop « standard de l'entreprise ».Il semble que FxCop souhaite que nous mettions cet attribut sur chaque page de notre application, ce qui ne m'intéresse vraiment pas.

Ma question est, pourquoi IDisposable avoir la [ComVisible(true)] attribut en premier lieu ?

Était-ce utile?

La solution

IDisposable est marqué comme COMVisible afin de permettre la suppression des ressources lorsqu'un composant .Net est utilisé dans une application COM.

Nous l'avons en fait largement utilisé lors de la transition d'une application VB6 vers une application .Net complète :nous avons pu réutiliser la fonctionnalité .Net (accès à la base de données) dans une application VB6 héritée, mais nous avons dû utiliser l'interface IDispose pour garantir que des éléments tels que les connexions à la base de données étaient correctement nettoyés lorsque nous avions fini d'utiliser l'objet.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top