1
我有一個C#程序集,用作非託管C++應用程序使用的進程內COM服務器。程序集消耗了一個不會改變的web服務,所以不需要更新web服務代理類。這就是爲什麼代理類被創建一次並且Reference.cs
文件被簡單地放入存儲庫並且僅從那裏編譯。如何優雅地防止Web服務代理暴露給COM?
問題是,默認情況下,web服務代理類是公共的,因此暴露給COM。這膨脹了typelib和污染註冊表。改變內部可見性打破了程序集,因此這些實體需要保持公開,但不需要暴露給COM。
裝聾作啞的方法是接近每一個公共接口/類的Reference.cs
文件,並用
[System.Runtime.InteropServices.ComVisible(false)]
標記它之後,它不再暴露在COM。
有沒有更好的方法?
請你第一個選項詳細點嗎?我只有一個程序集,reference.cs文件與我的代碼一起編譯到它中。 – sharptooth 2009-10-30 13:19:26
是的,但是你可以用ComVisible(true)標記所有的類,它們通過COM實際上是有意義的。 OTOH,因爲你說你的WSDL代理是非常靜態的(API方式),所以你最好用一個部分類型文件來標記它的所有類是ComVisible(false)。 這樣,您仍然可以重新生成它,因爲您實際上並未觸及自動生成的文件。 – 2009-10-30 13:30:53
我明白了。有用。我在第一個選項中詳細闡述了答案。 – sharptooth 2009-10-30 13:53:58