How I do a sign an assembly that has already been built into a dll specifically flute.dll

后端 未结 5 1104
故里飘歌
故里飘歌 2020-12-12 21:37

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 VS20

相关标签:
5条回答
  • 2020-12-12 22:03

    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!

    0 讨论(0)
  • 2020-12-12 22:15

    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:

    1. Generate a KeyFile: sn -k keyPair.snk
    2. Obtain the MSIL for the provided assembly: ildasm providedAssembly.dll /out:providedAssembly.il
    3. Rename/move the original assembly: ren providedAssembly.dll providedAssembly.dll.orig
    4. Create a new assembly from the MSIL output and your assembly KeyFile: ilasm providedAssembly.il /dll /key=keyPair.snk
    0 讨论(0)
  • 2020-12-12 22:23

    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 sdks\windows\v8.1a\bin\NETFX 4.5.1 Tools\sn" -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 sdks\windows\v8.1a\bin\NETFX 4.5.1 Tools\sn" -i SQLite-net.snk MySQLiteKeys
    REM Disassemble to Intermediate Language
    "c:\program files (x86)\microsoft sdks\windows\v8.1a\bin\NETFX 4.5.1 Tools\ildasm" 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:\Windows\Microsoft.NET\Framework\v2.0.50727\ilasm" SQLite-net.il /dll /key=SQLite-net.snk /out:SQLite-net.dll 
    REM Verify the assembly 
    "c:\program files (x86)\microsoft sdks\windows\v8.1a\bin\NETFX 4.5.1 Tools\sn" -v SQLite-net.dll
    REM Deletes MySQLiteKeys from the default CSP
    "c:\program files (x86)\microsoft sdks\windows\v8.1a\bin\NETFX 4.5.1 Tools\sn" -d MySQLiteKeys
    REM View results 
    pause
    
    0 讨论(0)
  • 2020-12-12 22:25

    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.

    0 讨论(0)
  • 2020-12-12 22:29

    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

    0 讨论(0)
提交回复
热议问题