欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

.Net解決引用程序集沒有強名稱報錯

 更新時間:2022年03月24日 09:08:59   作者:.NET開發(fā)菜鳥  
這篇文章介紹了.Net解決引用程序集沒有強名稱報錯的方法,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

一、什么是強名稱

強名稱是一個由程序集的標(biāo)識組成并通過公鑰和數(shù)字簽名(針對該程序集生成)加強的名稱,其中的標(biāo)識包括程序集的簡單文本名稱、版本號和區(qū)域性信息。

由于程序集清單包含構(gòu)成程序集實現(xiàn)的所有文件的文件散列,因此只對程序集中包含程序集清單的一個文件生成數(shù)字簽名就足夠了。強名稱相同的程序集應(yīng)該是相同的。

為什么要使用強名稱簽名

通過簽發(fā)具有強名稱的程序集,您可以確保名稱的全局唯一性。強名稱還特別滿足以下要求:

  • 強名稱依賴于唯一的密鑰對來確保名稱的唯一性。任何人都不會生成與您生成的相同的程序集名稱,因為用一個私鑰生成的程序集的名稱與用其它私鑰生成的程序集的名稱不相同。
  • 強名稱保護(hù)程序集的版本沿襲。強名稱可以確保沒有人能夠生成您的程序集的后續(xù)版本。用戶可以確信,他們所加載的程序集的版本出自創(chuàng)建該版本的同一個發(fā)行者。
  • 強名稱提供可靠的完整性檢查。通過.NET框架安全檢查后,即可確信程序集的內(nèi)容在生成后未被更改過。但請注意,強名稱中或強名稱本身并不暗含某一級別的信任,例如由數(shù)字簽名和支持證書提供的信任。
  • 在引用具有強名稱的程序集時,您應(yīng)該能夠從中受益,例如版本控制和命名保護(hù)。如果此具有強名稱的程序集以后引用了具有簡單名稱的程序集,則您將失去使用具有強名稱的程序集帶來的好處,并依舊會產(chǎn)生DLL沖突。因此,具有強名稱的程序集只能引用其他具有強名稱的程序集。

注意:強名稱的應(yīng)用程序只能引用強名稱的dll,不能引用未強名稱的dll,但是未強名稱的dll可以引用強名稱的dll。

二、如何設(shè)置強名稱

上面我們講了什么是強簽名,以及強簽名的好處,下面我們來看看如何給應(yīng)用程序設(shè)置強名稱。

1、應(yīng)用程序有源代碼

打開vs tool command,如下圖所示:

1、生成公鑰

然后進(jìn)入要設(shè)置強名稱的dll文件所在的路徑,使用下面的命令生成簽名公鑰:

sn -k StrongName.snk

如下圖所示:

2、設(shè)置簽名公鑰

將公鑰加入項目中,并設(shè)置項目屬性,設(shè)置簽名公鑰:

最后重新生成項目即可。

2、應(yīng)用程序沒有源代碼

如果項目中引用了其它第三方的dll文件,而且還沒有源代碼,并且此dll文件是沒有強名稱的程序集,則在編譯時會出現(xiàn)類似“程序集生成失敗--引用的程序集XXX沒有強名稱”。

比如我在程序中使用到了Dapper,而Dapper是沒有強名稱的,所以生成的時候報錯了,如下圖所示:

這時我們就需要把Dapper變成有強名稱的程序集。

1、打開SDK命令提示窗口

我們這里以VS 2012為例打開SDK命令提示窗口,如下圖所示:

然后需要進(jìn)入Dapper.dll文件所在的目錄:

2、創(chuàng)建一個新的隨機密鑰對

使用下面的命令生成一個隨機的密鑰對。

sn -k Dapper.snk

如下圖所示:

3、反編譯目標(biāo)程序集

使用下面的命令反編譯目標(biāo)程序集,該指令會反匯編該dll并生成Dapper.il,如果該dll含有嵌入的resource,則會有Dapper.res文件產(chǎn)生,并有相應(yīng)的嵌入資源文件產(chǎn)生。

ildasm Dapper.dll /out=Dapper.il

如下圖所示:

4、重新編譯,附帶強命名參數(shù)

使用下面的命令重新編譯Dapper.dll,然后會附帶強命名參數(shù)

ilasm Dapper.il /dll /resource=Dapper.res /key=Dapper.snk /optimize

如下圖所示:

這樣就表示編譯成功了。

5、驗證簽名信息

編譯成功以后,我們使用下面的命令來驗證重新編譯后的dll文件是否帶有強名稱

sn -v Dapper.dll

如下圖所示:

這就表示重新編譯后的dll文件有了強名稱。

6、重新引用

編譯成功以后,會在目錄下面生成這么幾個文件:

可以看到:Dapper.dll這個文件是最新生成的,我們在項目里面重新引用上面新編譯的Dapper.dll文件,然后重新編譯項目:

可以看到,這時就不會報Dapper.dll沒有強名稱的錯誤了。其它沒有強名稱的dll文件也使用同樣的方式進(jìn)行處理。

到此這篇關(guān)于.Net解決引用程序集沒有強名稱報錯的文章就介紹到這了。希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論