【问题标题】:NDbUnit MySQL Assembly Version ConflictNDbUnit MySQL 程序集版本冲突
【发布时间】:2011-02-10 23:59:02
【问题描述】:

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

有人有什么想法吗?

【问题讨论】:

    标签: mysql nhibernate ndbunit mysql.data


    【解决方案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 版本,所以当这个程序集的“面向数据库”端随着时间而变化时,“代码”包含在这种按定义的程序集类型中的类的-面向'一侧不能从一个版本更改为下一个版本。

    祝你好运~!

    【讨论】:

    • 谢谢,我会在下周尝试一下:D
    【解决方案2】:

    您可以在配置文件中尝试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"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-10-27
      • 1970-01-01
      • 2021-12-23
      • 2020-03-23
      • 2011-02-06
      • 2012-06-01
      • 2013-07-20
      相关资源
      最近更新 更多