"Регистрация для COM-взаимодействия" vs " делает сборку COM видимой"

в чем реальная разница между этими двумя вариантами? Вот что я знаю:--2-->

регистрация для COM-взаимодействия
Эта опция выполняет regasm на сборке и регистрирует сборку как COM-компонент(или, возможно, нет) в реестре со всеми com-записями реестра. Этот шаг генерирует файл TLB? Что еще делается?

иногда я вижу, что tlb генерируется при компиляции проекта, но иногда нет, почему это?

сделать сборку com видимой
Как это влияет на собрание? Если у меня есть следующий тип внутри этой сборки, мне все равно нужно указать "сделать сборку com видимой", даже если мой тип помечен как ComVisible?

[GuidAttribute("02810C22-3FF2-4fc2-A7FD-5E103446DEB0"), ComVisible(true)]
public interface IMyInterface
{
}

1 ответов


"сделать сборку com видимой" - это большой молоток, чтобы сделать все открытые типы в сборке [ComVisible]. Редко желательно, вы захотите выбрать конкретные типы,которые вы хотите быть видимыми, как вы сделали в своем фрагменте.

после сборки ее необходимо зарегистрировать, чтобы COM-клиент мог найти ее обратно. Который использует только номер для идентификации объекта, который он хочет создать, GUID, дополнительный поиск необходим, чтобы узнать, что реализует DLL он. Регистрация включает в себя запись ключей в HKLM\Software\Classes\CLSID\{guid} часть реестра. Вы можете сделать это сами, запустив Regasm.exe /codebase /tlb или вы можете оставить его до системы сборки, чтобы сделать это автоматически после сборки сборки.

что и делает "регистрация для COM-взаимодействия". Это желательно, так как это гарантирует, что старая копия DLL получает незарегистрированной автоматически до перезаписи, что предотвращает загрязнение реестра. VS должен работать с повышенными правами, чтобы иметь доступ к записи ключи реестра, одна из причин сделать его необязательным. Или вы просто не хотите регистрировать его, распространенный на серверах сборки. Я не могу прокомментировать, почему вы иногда не получаете .tlb без дополнительной диагностики.