Компиляция VB6 против параллельной сборки

У меня есть DLL, написанная на C # и настроенная для видимости COM. Я настроил его как параллельную сборку и могу успешно развернуть приложение на клиентских компьютерах без регистрации. Мой вопрос связан с разработкой ПК. Можно ли скомпилировать DLL в аналогичном поместье без регистрации или требуется регистрация на машине разработки? Я попытался добавить DLL напрямую через меню Project -> References и получил сообщение об ошибке «Не могу добавить ссылку на конкретный файл». DLL находится в том же каталоге, что и файл .vbp, и я попытался добавить DLL как с присутствием манифеста клиентского приложения, так и без него.


person davidk    schedule 03.06.2014    source источник


Ответы (1)


Я пробовал добавить DLL напрямую через меню Project -> References.

Это добавляет ссылку на библиотеку типов. Библиотека типов - это не зависящее от языка описание типов в компоненте COM, VB6 использует ее, чтобы знать, как генерировать эффективный код, а также обеспечивать проверку типов и автозаполнение. Библиотека типов - это точный эквивалент метаданных в сборке .NET.

Традиционно, как это делал VB6, библиотека типов была встроена как ресурс в DLL. Так что вы, вероятно, привыкли выбирать DLL в диалоговом окне. Однако это не так хорошо работает, когда DLL создается C #, библиотека типов может быть сгенерирована только после компиляции кода C #. Вы должны выбрать файл .tlb в диалоговом окне VB6. Традиционный способ начинается с описания компонента COM на языке IDL, библиотека типов может быть сгенерирована до компиляции кода, поэтому ее можно легко встроить в окончательную DLL. Технически это возможно сделать и на C #, но этапы сборки очень трудоемки и болезненны, вам, по сути, придется дважды собирать DLL с разными командами сборки.

Библиотека типов для библиотеки C # обычно создается одним из трех способов:

  • Используя Project + Properties, вкладку Build, опцию «Register for COM interop». Это требует, чтобы VS работал с повышенными правами, чтобы он мог писать в реестр. Вы запускаете VS с повышенными привилегиями, щелкнув его ярлык правой кнопкой мыши и выбрав «Запуск от имени администратора».
  • Запустив Regasm.exe с параметром / tlb: filename. Альтернатива для первой пули и необходима, если вы по какой-то причине не хотите запускать VS с повышенными правами. Использование параметра / codebase на вашем компьютере разработчика также является разумным, чтобы заставить его работать точно так же, как и первый пункт, и не требовать помещения DLL в GAC с помощью gacutil.exe.
  • Запустив служебную программу Tlbexp.exe, экспортера библиотеки типов для сборок .NET. Регистрация не производится, создается только файл .tlb.

Первый пункт - это нормальный выбор и очень желательный, потому что вы никогда не можете забыть обновить библиотеку типов таким образом. Это прекрасно на машине разработчика, так как вы действительно заботитесь только о развертывании reg-free на машине пользователя. Вы, вероятно, попали в беду из-за того, что больше этого не делаете.

Использование 3-го варианта нормально и более совместимо с вашими целями, запустите Tlbexp из командной строки Visual Studio. Просто имейте в виду, что вам придется делать это снова, когда вы вносите изменения в свой код C #. Однажды забыв об этом и потеряв клочья волос на голове, пытаясь понять, почему ваши изменения в C # не кажутся эффективными, или получение трудно диагностируемых кодов ошибок дает вам множество причин снова рассмотреть первый пункт :) Вы можете подражать сценарий reg-free, запустив Regasm.exe с параметром / uninstall.

person Hans Passant    schedule 03.06.2014