The reason I want to sign the dll is because I want to add it to the Global Assembly Cache. The assembly is a css parsing engine written in Java and ported to J#. I use VS2008 so I can’t make J# projects. It doesn’t have a strong name key assigned to it and I have no idea how to do it now that it’s built.
Anyone have any ideas?
Answers:
Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.
Method 1
After a little searching, I found this post that explains one way of doing it.
Exerpt:
From a VS.NET command prompt, enter the following:
- Generate a KeyFile:
sn -k keyPair.snk - Obtain the MSIL for the provided assembly:
ildasm providedAssembly.dll /out:providedAssembly.il - Rename/move the original assembly:
ren providedAssembly.dll providedAssembly.dll.orig - Create a new assembly from the MSIL output and your assembly KeyFile:
ilasm providedAssembly.il /dll /key=keyPair.snk
Method 2
Step 1: Dis-assemble the assembly
ildasm myTest.dll /out:myTest.il
Step 2: Re-Assemble using your strong-name key
ilasm myTest.il /res:myTest.res /dll /key:myTest.snk /out:myTestSN.dll
For verification you can use following command:
sn -vf myTestSN.dll
Hope this helps!
Method 3
This link also shows how to do it, including when one of the 3rd party assemblies you’re signing has a reference to another unsigned assembly that you’re signing:
http://buffered.io/posts/net-fu-signing-an-unsigned-assembly-without-delay-signing
Edit: sorry, link is busted.
Method 4
The Strong Name tool can re-sign an existing assembly, using the -R option. However, from what I understand, the assembly has to be previously signed or delay-signed… not sure you can use it with an unsigned assembly, but you can give it a try
Method 5
Thx especially PJ8 for posting an answer 8 years ago that still saved me today. “My” assembly needed to go in the GAC but was dependent on SQLite-pcl-net which as of version 1.3.1 is not strong-named although it is now dependent on the strong-named SQLitePCLRaw.bundle_green. So I had to sign SQLite-pcl-net in order to sign my own assembly in other words. I ended up with a cradle-to-grave .bat file consolidated from info in this post and a few other places I traveled today. The “pros” are 1. that this .bat runs in the location of the assembly that you want to sign 2. shows at least a hint as to where the three tools might be located on a dev machine. 3. shows all the steps in order. The “con” of course is that your mileage may vary as to where ildasm, ilasm and sn are actually located on your particular PC. Anyway cheers.
REM Create a new, random key pair "c:program files (x86)microsoft sdkswindowsv8.1abinNETFX 4.5.1 Toolssn" -k SQLite-net.snk REM Store the key in the container MySQLiteKeys in the strong name Cryptographic Services Provider (CSP). "c:program files (x86)microsoft sdkswindowsv8.1abinNETFX 4.5.1 Toolssn" -i SQLite-net.snk MySQLiteKeys REM Disassemble to Intermediate Language "c:program files (x86)microsoft sdkswindowsv8.1abinNETFX 4.5.1 Toolsildasm" SQLite-net.dll /out:SQLite-net.il REM Rename original file ren SQLite-net.dll SQLite-net.dll.orig REM Reassemble to a strong-named version "c:WindowsMicrosoft.NETFrameworkv2.0.50727ilasm" SQLite-net.il /dll /key=SQLite-net.snk /out:SQLite-net.dll REM Verify the assembly "c:program files (x86)microsoft sdkswindowsv8.1abinNETFX 4.5.1 Toolssn" -v SQLite-net.dll REM Deletes MySQLiteKeys from the default CSP "c:program files (x86)microsoft sdkswindowsv8.1abinNETFX 4.5.1 Toolssn" -d MySQLiteKeys REM View results pause
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0