有時候你會需要一個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文件重新引入到項目中然後編譯。