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





Это не совсем просто сделать с помощью Visual Studio .NET, но это возможно. На базовом уровне вам нужно сделать следующее:
Создайте свой TLB-файл, например "YourLibrary.tlb".
Создайте файл сценария ресурсов Win32 с именем, например, YourLibrary.rc, используя текстовый редактор (например, Блокнот или File / New / File ... / Text File в Visual Studio).
В файле сценария введите следующий текст дословно (но, конечно, замените фактическое имя файла TLB):
1 библиотека типов "YourLibrary.tlb"
Сохраните файл сценария в той же папке, что и файл TLB.
В командной строке Visual Studio перейдите в папку с файлом сценария и скомпилируйте его с помощью следующей команды:
rc YourLibrary.rc
Это создаст файл ресурсов Win32 в той же папке под названием «YourLibrary.res».
В Visual Studio щелкните правой кнопкой мыши узел проекта (например, «YourLibrary») в обозревателе решений и выберите «Свойства».
На вкладке «Приложение» в разделе «Ресурсы» выберите параметр «Файл ресурсов» и перейдите к файлу «YourLibrary.res» с шага 5.
Сохраните и перестройте проект.
TLB теперь будет встроен как ресурс в DLL, чтобы другие приложения COM могли его читать.
Если вы повторно сгенерируете файл TLB позже, вам нужно будет повторить шаг 5, чтобы перекомпилировать файл ресурсов, и шаг 8, чтобы встроить новую версию в DLL.
С учетом всего вышесказанного вы можете автоматизировать некоторые из них с помощью событий сборки или путем помещения настраиваемых целей MSBuild в файл проекта, но это уже совсем другое обсуждение.
На основе вашего ответа я составил событие Post-Build для автоматизации сборки и встраивания .tlb: thinkandcode.blogspot.ru/2015/05/…
Те же шаги, что и ответ ниже, но из MSDN: msdn.microsoft.com/en-us/library/ww9a897z.aspx