Frage

Ich habe eine C # Assembly, die ich als ein in-proc COM-Server durch eine nicht verwaltete C ++ Anwendung verbraucht verwenden. Die Baugruppe verbraucht eine Webservice, die dort ändern wird keine Notwendigkeit nicht immer so ist immer die Webservice-Proxy-Klassen zu aktualisieren. Deshalb ist die Proxy-Klassen einmal erstellt werden und Reference.cs Dateien werden einfach in das Repository stellen und nur von dort zusammengestellt.

Das Problem ist, dass die Webservice-Proxy-Klassen standardmäßig öffentlich sind und daher für COM verfügbar gemacht. Dies bläht die typelib und belastete Registrierung. Ändern Sichtbarkeit der Anordnung auf interne Pause, so müssen diese Einrichtungen öffentlich bleiben, müssen aber nicht für COM verfügbar gemacht werden.

Die dumme Art und Weise ist jede öffentliche Schnittstelle / Klasse in den Reference.cs Dateien zu nähern und mit

markiert
[System.Runtime.InteropServices.ComVisible(false)]

Danach ist es nicht länger auf COM ausgesetzt.

Gibt es einen besseren Weg?

War es hilfreich?

Lösung

Sie könnten

  • markieren Sie die Baugruppe selbst nicht zu ComVisible und dann markieren Sie explizit alle Schnittstellen / Klassen werden / Aufzählungen Sie COM als ComVisible verfügbar machen möchten.
  • verwenden, um eine zweite Datei und partielle Klasse Ihrer Proxy-Typen markieren wird ComVisible(false)

    [System.Runtime.InteropServices.ComVisible(false)]
    partial class YourProxyType {} 
    
    [System.Runtime.InteropServices.ComVisible(false)]
    partial class AnotherProxyType {}
    
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top