WebサービスプロキシがCOMに公開されるのをエレガントに防ぐ方法
-
22-07-2019 - |
質問
アンマネージC ++アプリケーションによって消費されるインプロセスCOMサーバーとして使用するC#アセンブリがあります。アセンブリは、変更されないWebサービスを消費するため、Webサービスプロキシクラスを更新する必要はありません。そのため、プロキシクラスが1回作成され、 Reference.cs
ファイルが単純にリポジトリに配置され、そこからのみコンパイルされます。
問題は、デフォルトでWebサービスプロキシクラスがパブリックであり、したがってCOMに公開されることです。これにより、typelibが膨張し、レジストリが汚染されます。内部の可視性を変更するとアセンブリが破損するため、これらのエンティティはパブリックのままにする必要がありますが、COMに公開する必要はありません。
愚かな方法は、 Reference.cs
ファイル内のすべてのパブリックインターフェイス/クラスにアクセスし、マークを付けることです
[System.Runtime.InteropServices.ComVisible(false)]
その後、COMに公開されなくなりました。
もっと良い方法はありますか?
解決
できます
- アセンブリ自体を
ComVisible
にしないようにマークし、COM
に公開するすべてのインターフェイス/クラス/列挙をComVisible
。 -
2番目のファイルと部分クラスを使用して、プロキシタイプを
としてマークします。ComVisible(false)
[System.Runtime.InteropServices.ComVisible(false)] partial class YourProxyType {} [System.Runtime.InteropServices.ComVisible(false)] partial class AnotherProxyType {}
所属していません StackOverflow