【问题标题】:Conflict Newtonsoft.Json DLL version with signalR + WEBAPI与 signalR + WEBAPI 冲突 Newtonsoft.Json DLL 版本
【发布时间】:2017-02-09 04:24:17
【问题描述】:

我得到了错误:

无法加载文件或程序集“Newtonsoft.Json”或其其中之一 依赖关系。清单定义与程序集不匹配 参考。

将 WebApi 控制器类添加到我的 ASP.NET MVC 项目后。我的项目中也有 SignalR。两者都在使用 Newtonsoft.Json,但似乎它们引用的版本不同。

SignalR 使用并与 6.0.8 版本一起使用,而错误告诉我 MapHttpRoute :

    protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        RouteConfig.RegisterRoutes(RouteTable.Routes);
        BundleConfig.RegisterBundles(BundleTable.Bundles);
        RouteTable.Routes.MapHttpRoute("DefaultApi", "api/{controller}/{id}");
    }

尝试加载 4.5 版本。

我读了这篇文章SignalR & WebApi - colliding Newtonsoft.Json references

但我不知道如何告诉 webapi 指向 6.0.8 版本。

【问题讨论】:

  • 链接的问题是非常老并且不适用。添加相关的 NuGet 包,而不是添加对程序集的引用。 NuGet 将在您安装包时解决所有冲突
  • 当您说添加相关的 NuGet 包时,您的意思是通过 NuGet 安装 Newtonsoft.Json ?因为我已经尝试过了,并用 9.0.0 版更新了它,SignalR 和 WebApi 都崩溃了,因为他们找不到程序集
  • Json.NET 和 SignalR。 SignalR 本身是另一个 NuGet 包。不过,请先尝试一个干净的项目,否则您必须删除已在 app.config 中添加的所有重定向
  • 我已经通过 NuGet 安装了 SignalR,现在我已经更新了 Newtonsoft.json。由于同样的原因,它仍然在崩溃。我从 web.config 中删除了所有重定向,它没有改变任何东西。我会从一个干净的项目中尝试

标签: c# asp.net-web-api json.net signalr


【解决方案1】:

您可以使用 AssemblyBinding 重定向到您安装的 Newtonsoft.Json 程序集。只需添加您的 Web.config

</configuration>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30AD4FE6B2A6AEED" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-6.0.8" newVersion="6.0.8" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>

这会将所有错误版本的调用重定向到您安装的版本 6.0.8

【讨论】:

  • 不起作用,(配置中没有命名空间,路径有效等)
  • 旧版本应该是旧的程序集版本号,即4.5.X,据我所知,这应该是新版本号0.0.0.0-6.0.8
  • 老版本可以给它一个范围,但是新版本只能是一个版本号
  • 好吧,我不知道为什么,但今天早上它工作得很好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-30
  • 2013-10-14
  • 2015-07-13
相关资源
最近更新 更多