У меня есть сборка, которая не имеет сильного имени. У меня нет исходного кода для него.
Теперь мне нужно его подписать. Есть ли способ сделать это?
У меня есть сборка, которая не имеет сильного имени. У меня нет исходного кода для него.
Теперь мне нужно его подписать. Есть ли способ сделать это?
Если исходная сборка отмечена для отложенной подписи, вы можете использовать инструмент sn.exe.
Если исходная сборка не помечена так, вы можете разобрать ее с помощью ildasm.exe, а затем повторно собрать ее с помощью ilasm.exe и указать аргумент /key. Ссылки: [1] [2].
Пример:
> ildasm /all /out=MYASSEMBLY.il MYASSEMBLY.dll
> ilasm /dll /key=key.snk MYASSEMBLY.il
Легкий способ подписания сторонней сборки использует версию 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/
Используйте служебную программу сильного имени (sn.exe).
Взгляните на мой StrongNameResigner. Он может подписывать или оставлять сборку и все сборки, которые зависят от нее, а также обновлять все ссылки, используя такую команду:
StrongNameResigner.exe -a "c:\temp" -k "key.snk" Foo.Bar
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.