NDbUnit MySQL程序集版本冲突

时间:2010-04-22 10:01:12

标签: mysql nhibernate ndbunit mysql.data

我正在尝试将NHiberanate与NDbUnit一起使用但我不能因为NDbUnit尝试加载MySql.Data版本1.0.10.1并且NHibernate尝试加载版本6.2.2.0并且我只能引用其中一个。

这是我尝试运行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

有没有人有任何想法?

2 个答案:

答案 0 :(得分: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"

答案 1 :(得分:1)

如果程序集绑定重定向感觉“hacky”(它根本不是)或“不方便脆弱”(通常是这样),你也可以简单地针对你想要的'MySql.Data程序集重新编译NDbUnit(因为NDbUnit是打开的)来自http://ndbunit.googlecode.com

的来源

据我所知(作为NDbUnit项目的主要提交者),MySql.Data中没有任何重大变化。 v1x和v6x。 MySql.Data程序集的目的仅仅是提供构成ADO.NET堆栈的接口“family”的MySql特定实现(IDbConnection,IDBCommand等),因此BY DEFINITION不能在MySql中发生重大变化从v1到v6的数据汇编(因为自从.NET 2.0发布以来,MS并没有真正触及这些接口)。

这些接口的早期MySql.Data和后来的MySql.Data实现之间的唯一区别是它们打算支持的MySql的版本,所以当这个程序集的“面向数据库”的一侧随着时间的推移而变化时,'代码' -Facing'这个程序集中包含的类的一部分BY DEFINITION不能从一个版本更改为下一个版本。

祝你好运〜!