2012-11-13 32 views
2

我必須在我的項目中使用一些對程序集XXXXX有參考的dll文件。我現在在我的項目中有這個程序集的更新版本,但是當我運行我的項目時,出現錯誤:Could not load file or assembly XXXXX, Version=XXXXX。我試圖用MSDN article Redirecting Assembly Versions來解決這個問題。但它沒有幫助。似乎重定向程序集不起作用,因爲我擁有不同的公共令牌密鑰。舊裝配中爲null。但它在新裝配中有一些價值「xxxxxxxxxxx」。如何解決這個問題?使用不同的publicKeyToken升級參考.Net dll

P.S.類似的問題是here。但區別在於我擁有不同的公共令牌密鑰。

回答

0

您將需要獲得新版本的您使用的新版本的XXXXX的dll文件。

您可以在http://msdn.microsoft.com/en-us/library/yx7xezcf.aspx中瞭解關於裝配查詢的更多信息。

+0

帶有新參考的此dll的新版本不可用 – Anton

+1

然後,你運氣不好。您可以使用過時的引用來構建您自己的程序集版本,其中引用了使用ildasm和ilasm引用新版本的XXXXX,如http://blogs.msdn.com/b/thottams/archive/2007/02/01中所述/using-ilasm-and-ildasm.aspx。但這是一個相當低的任務。我認爲你需要重建的程序集沒有簽名,因爲它有一個對未簽名版本的XXXXXX的引用。 – fsimonazzi

+0

你可以有兩個版本的XXXXX大會,順便說一句? – fsimonazzi

0

共享DLL中的公鑰應該保護應用程序免受「人/中間人」攻擊。

如果當前sub.dll與編譯main.exe時沒有相同的公鑰,則dot net運行時會正確拒絕啓動帶有sub.dll的main.exe。

來解決這個問題,你可以

  • 重新編譯MAIN.EXE新sub.dll
  • 化妝舒爾說sub.dll的兩個版本都具有相同的公鑰編譯。在你的情況下,你可以從sub.dll中刪除公鑰(即使用ilmerge),因爲舊的sub.dll沒有密鑰。
+0

1)我無法重新編譯並避免在dll文件中使用2個不同的引用。有2個第三方DLL文件引用某些DLL的不同版本。 2)當我從sub.dll中刪除公鑰時出現錯誤:「無法加載文件或程序集'XXXXX'或它的一個依賴項,找到的程序集清單定義與程序集引用不匹配(異常來自HRESULT:0x80131040 )」 – Anton