如何使一個你沒有源代碼的DLL文件變爲強命名的DLL

  有時候你會需要一個DLL是強命名的,比如你想把這個文件放到GAC裏面。如果這是一個第三方的DLL,你沒有源代碼,這會是一件比較麻煩的事情。有一個方法可以解決這個問題。 

  在VS.NET的命名行窗口下,輸入如下的代碼。 

  1 ,生成一個KeyFile 

  sn -k keyPair.snk 

  2, 得到程序集的MSIL 

  ildasm SomeAssembly.dll /out:SomeAssembly.il  

  3 ,爲了避免衝突,把原來的DLL文件改名 

  ren SomeAssembly.dll SomeAssembly.dll.orig  

  4  使用導出的MSIL和剛創建的KeyFile生成一個新的的DLL文件。 

  ilasm SomeAssembly.il /dll /key= keyPair.snk  

  這些工具都在哪裏? 

  C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\ilasm.exe

  C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin\ildasm.exe

  C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin\sn.exe

  

  爲沒有源碼的DLL文件添加強名稱

  如果項目中引用了其他沒有源碼的dll文件,並且此dll文件是沒有強名稱的程序集,則編譯時會出現類似 "Assembly generation failed -- 引用的程序集 'xxxxxxxxxxx' 沒有強名稱" 這樣的錯誤。
我這裏引用的是Interop.Scripting.dll程序集,它不是強名稱的,則需要進行以下操作:
  1.打開SDK 命令提示窗口;
     2.創建一個新的隨機密鑰對:
  sn -k Interop.Scripting.snk
  3.反編譯目標程序集
  ildasm Interop.Scripting.dll /out=Interop.Scripting.il
  3.重新編譯,附帶強命名參數
  ilasm Interop.Scripting.il /dll /resource=Interop.Scripting.res /key=Interop.Scripting.snk /optimize
  4.驗證簽名信息
  sn -v Interop.Scripting.dll

  OK,將生成的dll文件重新引入到項目中然後編譯。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章