«Зарегистрироваться для COM Interop» против «Сделать сборку COM видимой» - PullRequest
65 голосов
/ 13 сентября 2010

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

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

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

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

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

Ответы [ 2 ]

97 голосов
/ 13 сентября 2010

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

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

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

0 голосов
/ 17 января 2019

В дополнение к комментариям, сделанным в выбранном ответе, файл. tlb не создается, если типы или методы изменились без предварительного удаления соответствующей записи из реестра Windows (или закрытия приложения или службы).которые используют библиотеку), используя параметр / U утилиты RegAsm:

Regasm.exe yourlibrary.dll /codebase /tlb /u

Также важно отметить, что реестр для использования библиотеки как COM, будет работать только на компьютере разработчикаесли он скомпилирован с использованием опций Регистрация COM-взаимодействия и Сделать сборку COM-Visible .Необходимо зарегистрировать его вручную на каждом конечном компьютере, используя указанную командную строку или создав сценарий, который выполняется, когда библиотека установлена.

Приношу свои извинения за размещение этих комментариев в качестве ответа, но я не могуразмещайте комментарии в сообщении, потому что запрашивает 50 баллов репутации.

...