我正在尝试将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
有没有人有任何想法?
答案 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不能从一个版本更改为下一个版本。
祝你好运〜!