5
votes

My Visual Studio 2010 solution references a third party proprietary DLL.

When I try to compile the solution the error message reads:

Unable to emit assembly: Referenced assembly 'NameOfAssembly.DLL' does not have a strong name

Is the only solution to this issue to sign the third party DLL with my own key?

3

3 Answers

5
votes

That's criminal negligence by anybody that creates assemblies used by others, given how trivial it is to give an assembly a strong name while building it. Doing it afterwards is quite painful, you have to decompile the assembly with ildasm.exe and put it back together with ilasm.exe, now using the /key option.

If you have a working relationship with the owner then send them a nastygram. If you don't then you probably should question the quality of the assembly, this is a major oversight and shows evidence that few people actually use the assembly.

3
votes

Make sure you are licensed to reverse-engineer assemblies to as a strong name. I do not want you to have any legal troubles. You can strong name the assembly using the ILDASM and ILASM commands. In a Visual Studio command prompt.

Use the ILDASM to convert the assembly into MISL code. ILDASM MyThirdParty.dll /out:MyThirdParty.il

Use ILASM to compile with a strongname key. ILASM MyThirdParty.il /dll /resource=MyThirdParty.res /key=MyKey.snk

If you need to make a strong name key use the SN command. I think its the -k option. If you get a BadImage exception then you check what CLR version the assembly was compiled in. If its a CLR 2.0/3.5 then use "C:\Windows\Microsoft.NET\Framework\v2.0.50727\ILASM" instead of the 4.0 version.

2
votes

If you want strong-signed assemblies, all the references must be strong-signed. This entry describes the steps.