Как элегантно предотвратить доступ прокси-сервера веб-сервиса к COM?

StackOverflow https://stackoverflow.com/questions/1649752

Вопрос

У меня есть сборка на C #, которую я использую в качестве встроенного COM-сервера, используемого неуправляемым приложением на C ++.Сборка использует веб-сервис, который никогда не изменится, поэтому нет необходимости когда-либо обновлять прокси-классы веб-сервиса.Вот почему прокси-классы создаются один раз и Reference.cs файлы просто помещаются в репозиторий и только оттуда компилируются.

Проблема в том, что по умолчанию прокси-классы webservice являются общедоступными и поэтому доступны для 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