【问题标题】:Couldn't load assembly because of mismatching build number由于版本号不匹配,无法加载程序集
【发布时间】:2018-07-27 19:57:49
【问题描述】:

现在我正在重组我的项目,以便能够针对多个框架。
目前我的解决方案是这样的结构

MyProject (Solution)
    MyProject.Server (Project targeting net462)
    MyProject.Models (Project targeting netstandard2.0)
    MyProject.DataAccess (Project targeting netstandard2.0)

Models 和 DataAcces 都通过 NuGet 引用 Pomelo.EntityFrameworkCore.MySql, Version=2.1.1.0
Models 保存我的数据库模型和数据库上下文,而 DataAccess 包含 UnitOfWork 模式。
当所有项目都以 netfx 为目标并使用 EntityFramework 6 进行数据库连接时,这工作正常。
这些项目构建得很好,我启动它们没有任何问题(我应该在这里提一下,我的项目是一种用于多人修改的资源。资源文件像这样被加载https://github.com/GTANetworkDev/platform/blob/master/Server/Resources.cs#L198ourResource.Info.Info.Shadowcopy在这个案例假)。
但是,一旦我的资源想要打开与数据库的连接,我就会遇到一个巨大的异常,告诉我 System.ComponentModel.Annotations, Version=4.2.0.0 由于版本不匹配(https://hastebin.com/wodojakure.log)而无法加载。
文件System.ComponentModel.Annotations.dll 存在,但具有以下属性

AssemblyVersion=4.2.1.0
AssemblyFileVersion=4.6.26515.06

我已经尝试使用 app.config 重新绑定失败的程序集,原因我不知道。

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="System.ComponentModel.Annotations" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> 
        <bindingRedirect oldVersion="0.0.0.0-4.2.1.0" newVersion="4.2.1.0" /> 
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>

app.config 存在于其他资源 dll 所在的同一文件夹中,以及服务器可执行文件所在的同一文件夹中。

【问题讨论】:

  • 你能补充一个问题吗?不清楚你到底在问什么
  • 在 Visual Studio 中右键单击解决方案,然后选择解决方案的管理 NuGet 包。然后选择合并。然后参考相同版本的程序集并安装/更新。
  • 这两个项目都引用了相同版本的Pomelo.EntityFrameworkCore.MySql,正如您在条目中看到的那样。没有什么可以巩固的

标签: c# .net entity-framework-core .net-standard


【解决方案1】:

解决方案是,可执行文件(然后调用我的 dll)需要一个配置文件,您可以在其中指定绑定重定向,而不是调用的 dll 本身。

现在它就像一个魅力。感谢努力解决问题的人们。

【讨论】:

    猜你喜欢
    • 2021-12-23
    • 2011-08-18
    • 2019-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-26
    • 2011-07-20
    • 2014-05-15
    相关资源
    最近更新 更多