2010-04-22 26 views
1

我想用NHiberanate與NDbUnit,但我不能作爲NDbUnit試圖加載MySql.Data版本1.0.10.1和NHibernate試圖加載版本6.2.2.0,我只能引用其中之一。NDbUnit MySQL大會版本衝突

這是我得到的錯誤,當我嘗試運行NDbUnit

Set Up 
System.IO.FileLoadException: Could not load file or assembly 'MySql.Data, Version=1.0.10.1, Culture=neutral, PublicKeyToken=c5687fc88969c44d' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040) 
    at NDbUnit.Core.MySqlClient.MySqlDbCommandBuilder.GetConnection(String connectionString) 
    at NDbUnit.Core.DbCommandBuilder..ctor(String connectionString) 
    at NDbUnit.Core.MySqlClient.MySqlDbCommandBuilder..ctor(String connectionString) 
    at NDbUnit.Core.MySqlClient.MySqlDbUnitTest.CreateDbCommandBuilder(String connectionString) 
    at NDbUnit.Core.NDbUnitTest.GetDbCommandBuilder() 
    at NDbUnit.Core.NDbUnitTest.ReadXmlSchema(Stream xmlSchema) 
    at NDbUnit.Core.NDbUnitTest.ReadXmlSchema(String xmlSchemaFile) 
    at Proteus.Utility.UnitTest.DatabaseUnitTestBase.SaveDatabase(String connectionString, String schemaFilePathName, String datasetFilePathName, DatabaseClientType clientType) 
    at TGS.UserAccountControlTest.UserAccountManagerTest._TestFixtureSetup() in C:\Documents and Settings\Michal\My Documents\Visual Studio 2008\Projects\TGS\TGS.UserAccountControlTest\UserAccountManagerTest.cs:line 69 

有沒有人有什麼想法?

回答

1

如果程序集綁定重定向的感覺是「哈克」(它不是全部)或「不便脆」(通常是),你也可以根據你所需的MySql.Data程序集簡單地重新編譯NDbUnit(因爲NDbUnit是開源的),從我的知識(作爲NDbUnit項目的主要提交者),MySql中沒有重大更改.Data Between。 v1x和v6x。 MySql.Data程序集的意圖僅僅是提供組成ADO.NET堆棧的接口「族」(IDbConnection,IDBCommand等)的特定於MySql的實現,因此按照定義,MySql中不會發生重大更改。從v1到v6的數據組裝(因爲MS自.NET 2.0發佈以來並沒有真正觸碰這些接口)。

早期的MySql.Data和後來的這些接口的MySql.Data實現之間的唯一區別是它們打算支持的MySql的版本,所以雖然此程序集的「面向數據庫」一側隨時間而變化,但「面向代碼的'這一類包含在這個類的BY DEFINITION中的類不能從一個版本更改爲下一個版本。

祝你好運〜!

+0

謝謝我將在下週給出這個答案:D – 2010-04-23 15:58:29

3

你可以嘗試在配置文件中的binding redirect

<configuration> 
    <runtime> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <dependentAssembly> 
     <assemblyIdentity name="MySql.Data" 
          publicKeyToken="c5687fc88969c44d" 
          culture="neutral" /> 
     <bindingRedirect oldVersion="1.0.10.1" 
         newVersion="6.2.2.0" /> 
     </dependentAssembly> 
    </assemblyBinding> 
    </runtime> 
</configuration> 

如果兩個組件使用不同的密鑰簽名的,這可能無法正常工作。 V1和V6之間的差距看起來相當大,你所依賴的方法在這些版本之間不應該改變。

其實在你的情況下,它可能應該是:

oldVersion="6.2.2.0" 
newVersion="1.0.10.1"