Как подписать DLL файл .NET Assembly с сильным именем?
У меня есть сборка, которая не имеет сильного имени. У меня нет исходного кода для него.
Теперь мне нужно его подписать. Есть ли способ сделать это?
Ответы
Ответ 1
Если исходная сборка отмечена для отложенной подписи, вы можете использовать инструмент sn.exe.
Если исходная сборка не помечена так, вы можете разобрать ее с помощью ildasm.exe, а затем повторно собрать ее с помощью ilasm.exe и указать аргумент /key. Ссылки: [1] [2].
Пример:
> ildasm /all /out=MYASSEMBLY.il MYASSEMBLY.dll
> ilasm /dll /key=key.snk MYASSEMBLY.il
Ответ 2
Легкий способ подписания сторонней сборки использует версию GUI
Assembly Strong Name Signer
, доступную здесь: http://brutaldev.com/post/2013/10/18/NET-Assembly-Strong-Name-Signer.
Исходный код доступен в Github. Использует Mono.Cecil
для грязной работы. Доступно также как инструмент command line
.
Я нашел рекомендуемое путешествие ildasm
→ ilasm
в обе стороны, предлагаемое в нескольких местах громоздким и лучше избегать.
Я не знаю, как Assembly Strong Name Signer
обрабатывает многоадресные зависимости. Если это не так, проблема и ее решение описаны здесь (опубликовано в 2008 году): http://buffered.io/posts/net-fu-signing-an-unsigned-assembly-without-delay-signing/
Ответ 3
Используйте служебную программу сильного имени (sn.exe).
Ответ 4
Взгляните на мой StrongNameResigner. Он может подписывать или оставлять сборку и все сборки, которые зависят от нее, а также обновлять все ссылки, используя такую команду:
StrongNameResigner.exe -a "c:\temp" -k "key.snk" Foo.Bar
Ответ 5
You can sign the assembly with the help of VS command prompt.
Just type the path in VS cmd prompt where your project is physically present.
In VS cmd
<your project path>sn -k <name of your project>.snk
Then go to your project in Solution Explorer -> properties -> Signing -> check checkbox
-> Browse to the key which is created using VS cmd.