【问题标题】:Two different assembly versions "The located assembly's manifest definition does not match the assembly reference"两个不同的程序集版本“定位的程序集的清单定义与程序集引用不匹配”
【发布时间】:2012-04-19 14:12:35
【问题描述】:

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

----> System.IO.FileLoadException : 无法加载文件或程序集 'MySql.Data,版本=1.0.10.1, 文化=中性, 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 中的设置,还是必须在引用我的主程序集的每个应用程序或程序集中包含此信息?

【问题讨论】:

    标签: c# nhibernate assemblies migratordotnet


    【解决方案1】:

    您正在寻找Assembly Binding Redirection

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

    【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 这是我最后的手段,但有一半人认为我必须自己构建它。
    • 这是我必须做的。无法使程序集绑定重定向工作。交叉我的手指。
    • 我想我从来没有跟进过.. 我这样做了,而且效果很好。
    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

      • 谢谢。这就是提到的公认答案,我做到了。它确实有效=]
      【解决方案5】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-12-26
        • 1970-01-01
        • 2018-11-25
        • 1970-01-01
        • 2022-06-10
        • 2015-01-29
        • 2018-10-13
        • 1970-01-01
        相关资源
        最近更新 更多