冲突Newtonsoft.Json DLL版本与signalR + WEBAPI

时间:2016-09-30 14:39:25

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

我收到错误:

  

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

在我的ASP.NET MVC项目中添加WebApi控制器类之后。我的项目中也有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版本。

1 个答案:

答案 0 :(得分:3)

您可以使用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