在SignalR项目中Json引用冲突

Inr*_*ego 5 .net c# json json.net signalr

昨天我开始开发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);
    });
});
Run Code Online (Sandbox Code Playgroud)

调用失败处理程序,出现以下错误:无法加载文件或程序集"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;
}
Run Code Online (Sandbox Code Playgroud)

这是它失败的地方:

Clients.Caller.updateVehicle(vehicles.Data.First());
Run Code Online (Sandbox Code Playgroud)

如果我删除它 - 该方法将一直执行到最后,客户端超时并且永远不会收到Vehicles对象.

Bra*_*s83 8

另一个边缘情况,如果你使用signalr.exe ghp ...命令手动生成javascript文件(即用于单元测试等),你可以解决与web.config上面的答案类似的工作的问题.

只需signalr.exe.config在同一个地方创建一个常规的app.config文件(即),signalr.exe然后将以下内容放入其中:

<?xml version="1.0"?>
<configuration>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="Newtonsoft.Json" culture="neutral" publicKeyToken="30ad4fe6b2a6aeed" />
        <bindingRedirect oldVersion="0.0.0.0-7.0.0.0" newVersion="7.0.0.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>
Run Code Online (Sandbox Code Playgroud)

  • 新版本的Newtonsoft.Json已经出局,我需要将绑定重定向更改为使用"8.0.0.0". (2认同)

Tom*_*unn 2

我在我的项目中收到了同样的错误消息。我的设置如下:

  • Web(用于视图和 Web 内容的 ASP.NET MVC 5 项目 -依赖项:
    • Newtonsoft.Json 5.0.6(来自 MVC 项目模板)
    • WebPresentationModel(控制器和视图模型的 C# 类库)-依赖项
      • Newtonsoft.Json(通过 NuGet 添加到 6.0.1)

因此,在我通过 NuGet 将“Web”项目更新为 Newtonsoft.Json 6.0.1 后,错误消失了。也许您在引用不同版本的 Newtonsoft 的不同项目中遇到了类似的问题?看来 .NET 4.5 现在确实是您的问题。您是否在项目属性中将 .NET Framework 4.5(或 4.5.1)设置为目标框架?