Re: Dll-Hell создание своего Assembly Manifest на внешнюю сборку.
От: okman Беларусь https://searchinform.ru/
Дата: 26.11.12 12:34
Оценка: 7 (1)
Здравствуйте, Artemoniks, Вы писали:

A>Есть такая проблема: есть сборки, сделанные другим производителем, так получилось, что разработчик не позаботился о Dll-Hell и не прописал сертификаты к своим сборкам. Меня настигла эта проблема. Как выход, появилась идея прописать всем сборкам сертификаты собственноручно.

A>Пишу сертификат для сборки Lib1.dll, которая должна использовать сборку Lib2.dll

A>...


A>пытаюсь зарегистрировать Lib1.dll

A>regsvr32 Lib1.dll

A>Получаю ошибку:


A>...


A>sxstrace.exe — не помогает.


A>в WinSxS ни одна библиотека не прописана, не уверен, что это нужно...

A>По крайней мере это затруднительно, ввиду того, что нужно подписывать библиотеки, а подписать com библиотеки у меня пока не получилось.. это не так уж и просто..

A>Возможно такое, что в сертификате не прописаны COM классы ? Их там туча просто.

A>Обязательно ли в сертификате прописывать все COM классы ?

Ой, как все напутано !
Во-первых, не сертификаты, а манифесты. Во-вторых, regsvr32.exe звать не нужно.
В-третьих, никакие библиотеки подписывать не требуется, если только Вы не собираетесь
ставить сборки в системное хранилище (WinSxS).

Все несколько проще, попробую доступно описать.

Приложение A зависит от сборки B.
Чтобы выразить эту зависимость в терминах Side-By-Size (SxS), требуется создать
манифест приложения A со ссылкой на сборку B и манифест сборки B.
После этого сложить все файлы приложения, сборки и их манифесты в единую файловую структуру,
организованную по определенным правилам (более подробно — ищите в MSDN, там это все есть).
Если приложение лежит в папке верхнего уровня, то зависимые сборки и их манифесты должны
находиться в подпапках с одноименными названиями. Например (обратить внимание на имена
манифестов и подпапок — они должны в точности соответствовать именам сборок, не файлов):
myapp/

    app.exe (файл, использующий сборку assembly.dll по имени Company.Product.Component)
    app.exe.manifest (манифест приложения, может быть в ресурсах app.exe)

    Company.Product.Component/

        assembly.dll (сборка)
        Company.Product.Component.manifest (манифест сборки)


Когда разберетесь с этими базовыми вещами, добавляйте в манифест сборки информацию о COM, как
описано в соответствующих статьях MSDN. В результате должен получится registration-free COM-сервер,
который будет использоваться приложением по строго зафиксированному номеру версии и без необходимости
вызова regsvr32.exe.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.