"Регистрация для 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 без дополнительной диагностики.