Как подписать 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.

Я нашел рекомендуемое путешествие ildasmilasm в обе стороны, предлагаемое в нескольких местах громоздким и лучше избегать.

Я не знаю, как 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.