问题是这样的:我在我的项目中使用了SignalR 组件。当我直接用NuGet将SignalR 所需的dll都引用进来,然后创建一个demo程序,该程序是可以正常运行的。
但是我引入了Newtonsoft.Json 对应版本的源代码,并将解决方案的依赖设置为Newtonsoft.Json的源代码项目。再次运行demo 程序就报下面的错误:
Could not load file or assembly 'Newtonsoft.Json, Version=4.5.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)
鉴于以上错误,我做了如下尝试:
1.出现这样的报错后我通过设置web.config 中加入assemblyIdentity 也无济于事。
<dependentAssembly> <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="" culture="neutral" /> <bindingRedirect oldVersion="3.0.0.0-5.65535.65535.65535" newVersion="5.0.1.16007" /> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" /> <bindingRedirect oldVersion="3.0.0.0-5.65535.65535.65535" newVersion="5.0.1.16007" /> </dependentAssembly>
2.又尝试将依赖重新设置为Newtonsoft.Json包中的Bin\Net40\Newtonsoft.Json.dll ,这样demo程序又是可以正常运行的。
各位,有哪位遇到过这个问题? 初步怀疑是Newtonsoft.Json 的签名引起的,但是解决方案的属性里看并没有设置签名选项。也曾怀疑是SignalR 里使用了强签名引起的。
但是如何解决这个问题呢?
各位给指点迷津。。。。
是引用没改,还是有地方是在引用dll.这也引了源码项目,没有问题的
谢谢。
但是,我这里只有一个测试项目。其他地方没有引用。见下图:
@$克: 应该引用的其他DLL引用的Json.net有版本限制.你找下看是哪个DLL限制的,改一下看看
@吴瑞祥: 谢谢!
如果说是其他DLL 引用造成的版本限制的话,只有可能是Microsoft.AspNet.SignalR.Core 造成的。但是引用Newtonsoft.Json 官方生成的DLL 就是好的。同一个源码包里的源代码再生成DLL就不行。
@$克: 就跟你说的,DLL签名了应该,