Здравствуйте, 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.