Добавление ресурсов в существующую сборку - PullRequest
0 голосов
/ 28 февраля 2011

У меня есть COM Interop DLL, которую я автоматически генерирую из существующей COM DLL, используя tlbimp.Что мне нужно, это добавить детали в диалог свойств DLL для версии файла, информации об авторских правах и т. Д.

Я нашел некоторый пример кода , который использует API AssemblyBuilder.SetCustomAttribute() для динамической установки AssemblyCopyrightAttribute и т. д.

Однако используемый экземпляр AssemblyBuilder взят из AppDomain.CurrentDomain.DefineDynamicAssembly(), который, по-видимому, создает только новые сборки.(Действительно, всякий раз, когда я пробую этот код с моим именем DLL, он удаляет мою DLL и создает новую.)

Есть ли способ получить экземпляр AssemblyBuilder для существующей сборки?

Ответы [ 2 ]

2 голосов
/ 28 февраля 2011

Нет, вы принципиально ищете неправильное решение. То, что вы видите на вкладке Сведения в проводнике, на самом деле является неуправляемым ресурсом. Компилятор C # автоматически генерирует один из атрибутов сборки (опция компилятора / win32res), этого, конечно, не происходит при создании сборки взаимодействия. Или в этом отношении попробуйте создать его с помощью AssemblyBuilder.

Чтобы это работало, сначала нужно разобрать библиотеку взаимодействия с помощью ildasm.exe / out. Затем вы должны создать ресурс версии, лучше всего сделанный с проектом C ++. Используйте редактор ресурсов, чтобы добавить ресурс версии. После сборки вы получите файл .res. Затем с помощью ilasm.exe заново создайте библиотеку взаимодействия, используя параметр / resource для встраивания файла .res.

Я дал вам версию со скоростью 100 миль в час, это трудно автоматизировать.

0 голосов
/ 28 февраля 2011

Нет необходимости перепрыгивать через многие обручи, которые Ханс упоминает, просто чтобы добавить неуправляемый ресурс в PE-файл.Создайте ресурс версии в памяти - это не очень сложно - и используйте Win32 BeginUpdateResource & co.добавить этот ресурс в файл .exe, создаваемый tlbimp.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...