两个不同的汇编版本“找到的汇编的清单定义与汇编参考不匹配”

我有一个项目,我正在努力,需要使用Mysql Connector for NHibernate,(Mysql.Data.dll)。 我还想在同一个项目中引用另一个项目(Migrator.NET)。 问题是即使Migrator.NET是使用特定版本= false的MySql.Data引用构建的,它仍然会尝试引用构建库的旧版MySql.Data而不是仅使用那里的版本..我得到标题中列出的例外:

—-> System.IO.FileLoadException:无法加载文件或程序集’MySql.Data,Version = 1.0.10.1,Culture = neutral,PublicKeyToken = c5687fc88969c44d’或其依赖项之一。 定位的程序集的清单定义与程序集引用不匹配。 (HRESULTexception:0x80131040)

我在主程序集中引用的版本是6.1.3.0。 如何让两个组件合作?

编辑:

对于那些指定程序集绑定重定向的人,我已经设置了这个:

           

我在另一个项目中引用了这个主程序集,但仍然遇到了同样的错误。 如果我的主程序集被复制到本地以便在另一个程序集中使用,它是否会使用app.config中的设置,或者这些信息是否必须包含在引用我的主程序集的每个应用程序或程序集中?

这是一个非常严重的版本不匹配。 当版本差异太大时,bindingRedirect无法提供帮助。 你错了顺便一下,你想要newVersion匹配找到的那个。 但是不要去那里。

看看Migrator.NET下载,我想我看到了这个问题。 lib文件夹包含一个非常旧版本的MySql.Data.dll,它可以在.NET 1.0上运行。 首先切换它并尝试使用该程序集的版本6进行重建。 祝你好运,我想你需要它。

您正在寻找assembly绑定重定向 。

这允许您配置应用程序以查找不同的程序集版本。

如果你有两个版本的程序集,一个选项是并排使用它们,只需将应用程序配置为在正确的位置查找。 您可以通过在app.config中添加一些行来完成此操作,但对我来说,最可靠的方法是始终注册到AppDomain.AssemblyResolve事件并提供所需库的路径。

举个简单的例子,你可以看一下 (一个不太相关的问题的答案,但使用相同的技术;))

简单的解决方案是从Migrator.NET项目中删除Mysql.data.dll(引用旧的MySql版本)引用并添加新的引用MySql.data.dll(与另一个项目使用的版本相同)。 再次构建Migrator.NET,现在一切正常。 我遇到了同样的问题,我提到的解决方案对我来说非常合适

我也遇到了同样的问题,并且无法通过任何上述解决方案解决。 最后我找到了另外一个解决方案……从project => solution explorer中的license.licx文件中删除所有内容。

当我从此文件中删除所有内容时,它允许我成功构建项目