Как встраивать .tlb в качестве файла ресурсов в .NET Assembly DLL?

Мы используем нашу сборку .NET Assembly DLL внутри собственного С++ через COM (CCW). Всякий раз, когда я создаю новую версию своей DLL, мне приходится отправлять два файла (.dll и соответствующий .tlb) в экипаж, который использует его в своем коде.

Можно ли встраивать .tlb файл в качестве ресурса в .NET DLL файл?

Ответы

Ответ 1

Это не так просто сделать с помощью Visual Studio.NET, но это можно сделать. На базовом уровне вам нужно сделать следующее:

  • Создайте свой TLB файл, например, "YourLibrary.tlb".

  • Создайте файл ресурса Win32 script, называемый, например, "YourLibrary.rc", с помощью текстового редактора (например, "Блокнот" или "Файл/Новый/Файл.../Текстовый файл в Visual Studio" ).

  • В файле script введите следующий текст дословно (но, конечно, замените фактическое имя файла TLB):

    1 typelib "YourLibrary.tlb"

  • Сохраните файл script в той же папке, что и файл TLB.

  • Из командной строки Visual Studio перейдите в папку с файлом script и скомпилируйте ее, используя следующую команду:

    rc YourLibrary.rc

    Это создаст файл ресурсов Win32 в той же папке, что и "YourLibrary.res".

  • В Visual Studio щелкните правой кнопкой мыши проект node (например, "YourLibrary" ) в обозревателе решений и выберите "Свойства".

  • На вкладке "Приложение" в разделе "Ресурсы" выберите параметр "Файл ресурсов" и перейдите к файлу "YourLibrary.res" с шага 5.

  • Сохраните и перестройте проект.

Теперь TLB будет внедрен в качестве ресурса в DLL, чтобы другие COM-приложения могли его прочитать.

Если вы позже обновите файл TLB, вам нужно будет повторить шаг 5, чтобы перекомпилировать файл ресурсов и шаг 8, чтобы внедрить новую версию в DLL.

Все, что было сказано, вы можете автоматизировать некоторые из них с помощью Build Events или поместив пользовательские цели MSBuild в свой файл проекта, но это еще одно обсуждение.