Frage

Ich habe eine große ältere ASP.NET-Anwendung geerbt, in der ich arbeite, und unser Unternehmen möchte, dass wir FxCop verwenden und alle größeren Regelverstöße beheben.Derzeit scheint folgende Regel vorherrschend zu sein:

CA1405:Basistypen des sichtbaren COM-Typs sollten COM-sichtbar sein

Es scheint, dass jede ASP.NET-Seite/jedes ASP.NET-Steuerelement in unserer Anwendung gegen diese Regel verstößt.Ich war mir zunächst nicht sicher, warum, aber schließlich wurde mir klar, dass es an der folgenden Vererbungskette liegt:

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

Ich habe es auch gemerkt IDisposable ist definiert als:

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

Zusammenfassen:Alle ASP.NET-Seiten/Steuerelemente erben von IDisposable, Und IDisposable hat die [ComVisible(true)] Attribut, was bedeutet, dass alle Seiten/Steuerelemente diese Regel nicht erfüllen.

Das tut uns weh, denn unsere Anwendung hat Tausende von Seiten und Kontrollen und damit Tausende von Verstößen.Das Deaktivieren der Regel ist keine Option, da wir über einen „Firmenstandard“-Satz von FxCop-Regeln verfügen.Es scheint, dass FxCop möchte, dass wir dieses Attribut durchgehen und auf jeder einzelnen Seite unserer Anwendung einfügen, woran ich wirklich kein Interesse habe.

Meine Frage ist, warum IDisposable habe den [ComVisible(true)] Attribut überhaupt?

War es hilfreich?

Lösung

IDisposable ist als COMVisible markiert, um die Entsorgung von Ressourcen zu ermöglichen, wenn eine .Net-Komponente in einer COM-Anwendung verwendet wird.

Wir haben dies tatsächlich häufig beim Übergang von einer VB6-Anwendung zu einer vollständigen .Net-Anwendung genutzt:Wir konnten die .NET-Funktionalität (Datenbankzugriff) in einer älteren VB6-Anwendung wiederverwenden, mussten jedoch die IDispose-Schnittstelle verwenden, um sicherzustellen, dass Dinge wie Datenbankverbindungen korrekt bereinigt wurden, wenn wir mit der Verwendung des Objekts fertig waren.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top