我正在尝试将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有谁有什么想法吗?
发布于 2010-04-23 19:17:50
如果程序集绑定重定向感觉“老土”(根本不是)或“不方便地脆弱”(通常如此),您还可以通过从http://ndbunit.googlecode.com获取源代码,针对“所需的”MySql.Data程序集(因为NDbUnit是开源的)重新编译NDbUnit
据我所知(作为NDbUnit项目的主要提交者),MySql.Data之间没有突破性的变化。v1x和v6x。MySql.Data程序集的目的仅仅是提供组成ADO.NET堆栈(IDbConnection、IDBCommand等)的接口“族”的特定于MySql的实现。因此,根据定义,从v1到v6的MySql.Data程序集不会有重大变化(因为自从.NET 2.0发布以来,MS还没有真正接触过这些接口)。
这些接口的早期MySql.Data和后来的MySql.Data实现之间的唯一区别是它们打算支持的MySql版本,因此,尽管此程序集的“面向数据库”的方面随着时间的推移而变化,但根据定义,此程序集中包含的类的“面向代码”的方面不能从一个版本更改到下一个版本。
祝你好运~!
发布于 2010-04-22 19:13:52
您可以在配置文件中尝试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"https://stackoverflow.com/questions/2689791
复制相似问题