2016-09-30 112 views
1

我得到的错误:冲突Newtonsoft.Json DLL版本signalR +的WebAPI

无法加载文件或程序集“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版本点。

+0

链接的问题是*很老*并不适用。添加相关的NuGet包,而不是添加对组件的引用。 NuGet将在您安装软件包时解决所有冲突 –

+0

当您说添加相关的NuGet软件包时,是指通过NuGet安装Newtonsoft.Json?因为我已经试过了这个版本,并且用版本9.0.0更新了它,并且SignalR和WebApi都崩溃了,因为它们找不到组件 – Morgan

+0

Json.NET和SignalR。 SignalR本身是另一个NuGet包。首先尝试一个干净的项目,否则你将不得不删除任何你已经添加到app.config中的重定向 –

回答

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

+0

不幸的是,它已经是这种情况 – Morgan

+0

你试过这个[http://stackoverflow.com/a/12011221/6666799](http://stackoverflow.com/a/12011221/6666799) – Rabban

+0

不起作用,(配置中没有命名空间,没有有效路径等) – Morgan