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

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

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


person Jox    schedule 06.01.2009    source источник
comment
Те же шаги, что и ответ ниже, но из MSDN: msdn.microsoft.com/en- us / library / ww9a897z.aspx   -  person yzorg    schedule 03.10.2011


Ответы (1)


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

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

  2. Создайте файл сценария ресурсов Win32 с именем, например, YourLibrary.rc, используя текстовый редактор (например, Блокнот или File / New / File ... / Text File в Visual Studio).

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

    1 библиотека типов "YourLibrary.tlb"

  4. Сохраните файл сценария в той же папке, что и файл TLB.

  5. В командной строке Visual Studio перейдите в папку с файлом сценария и скомпилируйте его с помощью следующей команды:

    rc YourLibrary.rc

    Это создаст файл ресурсов Win32 в той же папке под названием «YourLibrary.res».

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

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

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

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

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

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

person Eric Rosenberger    schedule 07.01.2009
comment
На основе вашего ответа я составил событие Post-Build для автоматизации сборки и встраивания .tlb: thinkandcode.blogspot.ru/2015/05/ - person Mikhail; 09.05.2015