亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

.Net解決引用程序集沒(méi)有強(qiáng)名稱報(bào)錯(cuò)

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

一、什么是強(qiáng)名稱

強(qiáng)名稱是一個(gè)由程序集的標(biāo)識(shí)組成并通過(guò)公鑰和數(shù)字簽名(針對(duì)該程序集生成)加強(qiáng)的名稱,其中的標(biāo)識(shí)包括程序集的簡(jiǎn)單文本名稱、版本號(hào)和區(qū)域性信息。

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

為什么要使用強(qiáng)名稱簽名

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

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

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

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

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

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

打開(kāi)vs tool command,如下圖所示:

1、生成公鑰

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

sn -k StrongName.snk

如下圖所示:

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

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

最后重新生成項(xiàng)目即可。

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

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

比如我在程序中使用到了Dapper,而Dapper是沒(méi)有強(qiáng)名稱的,所以生成的時(shí)候報(bào)錯(cuò)了,如下圖所示:

這時(shí)我們就需要把Dapper變成有強(qiáng)名稱的程序集。

1、打開(kāi)SDK命令提示窗口

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

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

2、創(chuàng)建一個(gè)新的隨機(jī)密鑰對(duì)

使用下面的命令生成一個(gè)隨機(jī)的密鑰對(duì)。

sn -k Dapper.snk

如下圖所示:

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

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

ildasm Dapper.dll /out=Dapper.il

如下圖所示:

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

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

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

如下圖所示:

這樣就表示編譯成功了。

5、驗(yàn)證簽名信息

編譯成功以后,我們使用下面的命令來(lái)驗(yàn)證重新編譯后的dll文件是否帶有強(qiáng)名稱

sn -v Dapper.dll

如下圖所示:

這就表示重新編譯后的dll文件有了強(qiáng)名稱。

6、重新引用

編譯成功以后,會(huì)在目錄下面生成這么幾個(gè)文件:

可以看到:Dapper.dll這個(gè)文件是最新生成的,我們?cè)陧?xiàng)目里面重新引用上面新編譯的Dapper.dll文件,然后重新編譯項(xiàng)目:

可以看到,這時(shí)就不會(huì)報(bào)Dapper.dll沒(méi)有強(qiáng)名稱的錯(cuò)誤了。其它沒(méi)有強(qiáng)名稱的dll文件也使用同樣的方式進(jìn)行處理。

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

相關(guān)文章

最新評(píng)論