Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Third party DLL does not have 'strong name'?

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?

like image 224
CJ7 Avatar asked Mar 17 '13 10:03

CJ7


People also ask

How do you fix referenced assembly does not have a strong name error?

The solution was to install StrongNamer from NuGet, which automatically adds a strong name to all referenced assemblies. Just simply having it referenced in the project fixed my issue.

How do you check if a DLL is strong named?

First, right click on the Assembly DLL -> Properties -> Details. Here you can find the name, version and Culture of your Assembly. It will give you the public key.

How do you set a strong assembly name?

In Solution Explorer, open the shortcut menu for the project, and then choose Properties. Under the Build tab you'll find a Strong naming node. Select the Sign the assembly checkbox, which expands the options. Select the Browse button to choose a Strong name key file path.


3 Answers

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.

like image 110
Hans Passant Avatar answered Sep 28 '22 06:09

Hans Passant


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.

like image 44
user2205317 Avatar answered Sep 28 '22 07:09

user2205317


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

like image 44
Laurent Etiemble Avatar answered Sep 28 '22 08:09

Laurent Etiemble