Wie man elegant einen Web-Service-Proxy verhindern zu COM ausgesetzt werden?
-
22-07-2019 - |
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
[System.Runtime.InteropServices.ComVisible(false)]
Danach ist es nicht länger auf COM ausgesetzt.
Gibt es einen besseren Weg?
Lösung
Sie könnten
- markieren Sie die Baugruppe selbst nicht zu
ComVisible
und dann markieren Sie explizit alle Schnittstellen / Klassen werden / Aufzählungen SieCOM
alsComVisible
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 {}