質問

アンマネージ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 {}
    
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top