3

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

----> System.IO.FileLoadException:无法加载文件或程序集“MySql.Data,版本=1.0.10.1,Culture=neutral,PublicKeyToken=c5687fc88969c44d”或其依赖项之一。找到的程序集的清单定义与程序集引用不匹配。(来自 HRESULT 的异常:0x80131040)

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

编辑:

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

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="MySql.Data" publicKeyToken="c5687fc88969c44d" culture="neutral"/>
        <bindingRedirect oldVersion="0.0.0.0-6.1.3.0" newVersion="6.1.3.0"/>
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>

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

4

5 回答 5

3

您正在寻找Assembly Binding Redirection

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

于 2010-02-17T20:15:31.053 回答
2

这是一个非常严重的版本不匹配。当版本差异如此之大时,bindingRedirect 将无济于事。顺便说一句,您弄错了,您希望 newVersion 与找到的版本相匹配。但不要去那里。

查看 Migrator.NET 下载,我想我看到了问题所在。lib 文件夹包含一个非常旧版本的 MySql.Data.dll,它是在 .NET 1.0 上运行的。首先对其进行 zapping,然后尝试使用该程序集的版本 6 进行重建。祝你好运,我想你会需要它的。

于 2010-02-17T20:33:52.330 回答
1

如果您有两个版本的程序集,一种选择是并排使用它们并简单地配置应用程序以查看正确的位置。您可以通过在 app.config 中添加一些行来做到这一点,但对我来说,最可靠的方法始终是注册AppDomain.AssemblyResolve事件并提供所需库的路径。

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

于 2010-02-17T20:17:56.273 回答
1

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

于 2010-03-11T18:04:51.883 回答
-1

我也面临同样的问题,并且无法通过上述任何解决方案来解决。所以最后我找到了另一种解决方案......从解决方案资源管理器中的 project=>Properties 中的 license.licx 文件中删除所有内容。

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

于 2012-04-19T06:12:35.270 回答