昨天我开始开发SignalR应用程序 - 我创建了2个不同的项目(服务器和客户端),一切顺利。
今天,我再次打开它 - 现在它引起了问题。
这是我的客户代码:
signalrHub.client.updateVehicle = function (dbVehicle) {
$.each(Vehicles, function() {
var vehicle = this;
if (vehicle.id == dbVehicle.id && vehicle.dataset == dbVehicle.dataset) {
vehicle.move(dbVehicle.latitude, dbVehicle.longitude);
}
});
};
$.connection.hub.url = "http://localhost:52522/signalr";
signalrHub = $.connection.routeHub;
$.connection.hub.start().done(function() {
signalrHub.server.joinDataset("JR");
signalrHub.server.getVehicles("JR").done(function (response) {
$.each(response.vehicles, function() {
Vehicles.push(new Vehicle(this));
});
$.each(Vehicles, function() {
this.addToMap();
});
}).fail(function(error) {
alert(error);
});
});
调用失败处理程序,出现以下错误: 无法加载文件或程序集“Newtonsoft.Json,Version = 6.0.0.0,Culture = neutral,PublicKeyToken = 30ad4fe6b2a6aeed”或其中一个依赖项。定位的程序集的清单定义与程序集引用不匹配。 (HRESULT异常:0x80131040)
我尝试将Newtonsoft.Json更新为6.0 - 但后来我发现编译错误正在寻找版本4.5。
这是服务器端的GetVehicles:
public async Task<Vehicles> GetVehicles(string dataset)
{
var vehicles = await Vehicles.GetData(dataset, DateTime.Today, DateTime.Today.AddDays(1));
Clients.Caller.updateVehicle(vehicles.Data.First());
return vehicles;
}
这是它失败的一行:
Clients.Caller.updateVehicle(vehicles.Data.First());
如果我删除它 - 该方法将一直执行到最后,并且客户端超时并且永远不会收到Vehicles对象。
答案 0 :(得分:8)
另一个边缘情况,如果您使用signalr.exe ghp ...
命令手动生成javascript文件(即用于单元测试等),您可以通过与{类似的工作来解决问题{1}}在上面回答。
只需在与web.config
相同的位置创建常规app.config文件(即signalr.exe.config
),然后将以下内容放入其中:
signalr.exe
答案 1 :(得分:3)
使用程序集重定向添加app.config
,即:
<?xml version="1.0"?>
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<!-- Redirect SignalR JSON -->
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
<bindingRedirect oldVersion="4.5.0.0-6.0.0.0" newVersion="6.0.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
</startup>
</configuration>
答案 2 :(得分:2)
我在项目中收到了相同的错误消息。我的设置看起来像这样:
所以在我通过NuGet将我的'Web'项目更新到Newtonsoft.Json 6.0.1后,错误就消失了。也许您在引用不同版本的Newtonsoft的不同项目中遇到了类似的问题?看起来.NET 4.5的问题现在真的是你的问题。您是否在项目属性中将.NET Framework 4.5(或4.5.1)设置为目标框架?
答案 3 :(得分:1)
毫无疑问,这只是一个临时的边缘情况,但我有这个完全相同的问题(System.IO.FileLoadException:无法加载文件或程序集'Newtonsoft.Json')与Windows 10预览 - Visual Studio 2015 RC组合...原来我在我的解决方案中使用了预发布版本的Newtonsoft Json(v7.0.1 beta)。
为了解决这个问题,我将NuGet降级为Newtonsoft Json v6.0.8,然后ghp工作正常。