2010-02-17 51 views
3

我有一個項目需要使用Mysql連接器進行NHibernate(Mysql.Data.dll)。我也想在同一個項目中引用另一個項目(Migrator.NET)。問題是,即使Migrator.NET是使用特定版本= false引用MySql.Data來構建的,它仍會嘗試引用該庫所構建的舊版MySql.Data,而不是僅使用那裏的版本..和我得到的標題所列的例外:兩個不同的程序集版本「找到的程序集清單定義與程序集引用不匹配」

----> System.IO.FileLoadException:無法加載文件或程序 「MySql.Data,版本= 1.0.10.1, 文化=中性, PublicKeyToken = c5687fc88969c44d'或 其依賴關係之一。位於 程序集清單定義 與程序集引用不匹配。 (來自HRESULT的例外:0x80131040)

我在主程序集中引用的版本是6.1.3.0。我如何獲得兩個組件的合作?

編輯:

對於那些你指定的程序集綁定重定向,我已經設置爲:

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <runtime> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <dependentAssembly> 
     <assemblyIdentity name="MySql.Data" publicKeyToken="c5687fc88969c44d" culture="neutral"/> 
     <bindingRedirect oldVersion="0.0.0.0-6.1.3.0" newVersion="6.1.3.0"/> 
     </dependentAssembly> 
    </assemblyBinding> 
    </runtime> 
</configuration> 

我在另一個項目中此引用主體和仍然得到同樣的錯誤。如果我的主程序集被複制到本地以用於其他程序集,它是否會使用app.config中的設置,或者是否必須將這些信息包含在引用我主程序集的每個應用程序或程序集中?

回答

2

這是一個相當總值版本不匹配。當版本差異很大時,bindingRedirect不會提供幫助。你錯了順便說一句,你想要newVersion匹配找到的那個。但不要去那裏。

看着Migrator.NET下載,我想我看到了問題。 lib文件夾包含一個真的舊版本的MySql.Data.dll,它被設計爲在.NET 1.0上運行。首先通過切換它並嘗試使用該程序集的版本6進行重建。祝你好運,我想你會需要它。

+0

這是我最後的手段,但一半預計我不得不自己建造它。 – snicker 2010-02-17 20:34:45

+0

這就是我所要做的。無法使程序集綁定重定向生效。穿過我的手指。 – snicker 2010-02-17 20:56:23

+2

我想我從來沒有跟進..我這樣做,它一直工作正常。 – snicker 2010-03-11 18:34:48

3

您正在尋找Assembly Binding Redirection

這使您可以配置應用程序以查找不同的程序集版本。

+0

我必須做錯了,因爲它不工作。 – snicker 2010-02-17 20:17:38

+0

新組件的PublicKeyToken是什麼? – Oded 2010-02-17 20:20:37

+0

c5687fc88969c44d – snicker 2010-02-17 20:28:01

1

如果你有兩個版本的程序集,一個選項將並排使用它們,並簡單地配置應用程序以查找正確的位置。您可以通過在app.config中放入一些行來完成此操作,但對我而言,最可靠的方法是始終註冊到AppDomain.AssemblyResolve事件,併爲需要的庫提供路徑。

舉個簡單的例子,你可以看看here(對於一個不是非常相關的問題的答案,但使用相同的技術;))

1

簡單的解決方法是從Migrator.NET項目中刪除Mysql.data.dll(引用舊的MySql版本)引用並添加新的引用MySql.data.dll(與另一個項目使用的相同版本)。再次構建Migrator.NET,現在都應該正常工作。我面臨同樣的問題,我提到的解決方案完全適合我

+0

謝謝。這就是所提及的被接受的答案,我做到了。它沒有工作=] – snicker 2010-03-11 18:34:19

-1

我也面臨同樣的問題,並沒有能夠解決任何上述解決方案。 因此,最後我發現了一個更多的解決方案... 刪除項目中的license.licx文件中的所有內容=>解決方案資源管理器中的屬性。

當我從這個文件中刪除了一切,它允許我成功地構建項目

相關問題