Невозможно подписать импортированную сборку msi.dll с помощью tlbimp

Это кажется таким тривиальным, но я не могу заставить его работать..

У меня есть оболочка msi.dll (с именем Interop.WindowsInstaller.dll), которую мне нужно подписать. Способ сделать это - подписать его при импорте (этот конкретный случай даже задокументирован в MSDN: http://msdn.microsoft.com/en-us/library/zec56a0w.aspx).

НО - независимо от того, как я это делаю (без ключевого файла, без добавления "/delaysign"), размер сгенерированной сборки всегда составляет 36 864 байта, а при просмотре свойств библиотеки DLL нет цифровых подписей. msgstr "вкладка (само собой разумеется - DLL НЕ подписана).

Что мне здесь не хватает?? (... ПОМОГИТЕ!...)

1 ответ

Решение

[ Примечание: в конце концов я получил подсказку от Карла Цикмунда на эту тему, которая помогла мне разгадать тайну. Я вставлю свой ответ здесь - для большего блага.

Итак, я использовал следующую строку для подписи при импорте сборки:

tlbimp C: \ WINDOWS \ system32 \ msi.dll /out:Interop.WindowsInstaller.dll /keyfile:MyKey.snk

Затем я скопировал файл в соответствующее место и собрал проект, но каждый раз при сбое сборки возникала следующая ошибка: сбой генерации сборки - у связанной сборки Interop.WindowsInstaller нет строгого имени.

Я думал, что проблема была в строке tlbimp, но после прочтения ответа Карела Зикмунда и проверки того, что DLL имеет строгое имя (используя sn -vf Interop.WindowsInstaller), я обнаружил проблему.

Добавление ссылки на COM-объект "Библиотека объектов установщика Microsoft Windows" фактически вставило блок кода в файл.csproj. Я не осознавал этого, но этот блок вызывал регенерирование DLL-файла с нуля при каждом построении проекта. Сгенерированный файл, конечно же, больше не назывался со строгим именем.

Я решил это путем удаления ссылки на "библиотеку объектов установщика Microsoft Windows" из проекта и добавления прямой ссылки на файл в импортированный (и уже подписанный) файл Interop.WindowsInstaller.dll.

Другие вопросы по тегам