1

我正在尝试将 NHibernate 与 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

有没有人有任何想法?

4

2 回答 2

3

您可以在配置文件中尝试绑定重定向:

<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"
于 2010-04-22T11:13:51.917 回答
1

如果程序集绑定重定向感觉“hacky”(根本不是)或“不方便易碎”(通常是),您也可以简单地针对您的“所需”MySql.Data 程序集重新编译 NDbUnit(因为 NDbUnit 是开源的)从http://ndbunit.googlecode.com获取源代码

据我所知(作为 NDbUnit 项目的主要提交者),MySql.Data 之间没有重大变化。v1x 和 v6x。MySql.Data 程序集的目的仅仅是提供构成 ADO.NET 堆栈(IDbConnection、IDBCommand 等)的接口“系列”的 MySql 特定实现,因此按照定义,MySql 中不能有重大更改从 v1 到 v6 的 .Data 组装(因为自 .NET 2.0 发布以来,MS 还没有真正接触过这些接口)。

这些接口的早期 MySql.Data 和后来的 MySql.Data 实现之间的唯一区别是它们旨在支持的 MySql 版本,因此,当此程序集的“面向数据库”端随着时间而变化时,“面向代码”包含在这种按定义分类的程序集中的类的一侧不能从一个版本更改为下一个版本。

祝你好运~!

于 2010-04-23T11:17:49.683 回答