ilmerge с файлом PFX

Похоже, что VS2012 использует файлы PFX для подписи, а не файлы SNK. У меня сложилось впечатление, что это связано с задержкой подписания; но мне все равно.

Когда я собираю свое приложение, я могу использовать "sn -tp <моя сборка>" и увидеть, что оно подписано.

Когда я погружаю папку отладки и использую директиву /keyfile (как я успешно делал с файлами SNK), библиотеки DLL объединяются в одну неподписанную библиотеку DLL.

Я прочитал статьи, предлагающие умные обходные пути, такие как извлечение открытого ключа из исходной DLL и последующее использование его в директиве /keyfile..., что также не позволило мне создать строго подписанную DLL.

Итак, что мне нужно сделать, чтобы ilmerge работал с файлом PFX, чтобы моя сборка была строго напечатана?

Спасибо

1 ответ

Недавно я пытался сделать то же самое (на этот раз с VS 2015, но я уверен, что результаты совпадают).

Файлы PFX по умолчанию защищены паролем, и ILMerge (на момент написания этой статьи) не поддерживает их.

Ручная подпись

"Умный обходной путь", как вы его описали, представлен здесь, и, похоже, это единственный способ сделать это:

>sn -p some.pfx some.pub
>ilmerge /keyfile:some.pub /delaysign /out:merged\some.dll some.dll
>sn -R merged\some.dll some.pfx

Обратите внимание, что извлечение открытого ключа из файла PFX требует ввода данных пользователем - якобы ранее можно было ввести пароль, но текущая версия sn.exe не разрешает перенаправление консоли.

Автоматизированное (CI Build System) Подписание

Для строгой автоматической подписи сборок ILMerged необходимо установить их ключ на локальном компьютере сборки. Для этого по-прежнему требуется ввод данных пользователем в форме ввода пароля, но это необходимо сделать только один раз для каждой сборки.

Как и прежде, нам нужно извлечь открытый ключ из файла PFX (это нужно сделать только один раз, и файл PUB можно сохранить вместе с PFX или даже зарегистрировать в источнике).

Вот одноразовый код настройки (оба требуют ввода пароля):

>sn -p some.pfx some.pub
>sn -i some.pfx SomeContainerName

Во время автоматической сборки теперь можно запустить:

>ilmerge /keyfile:some.pub /delaysign /out:merged\some.dll some.dll
>sn -Rc merged\some.dll SomeContainerName
Другие вопросы по тегам