【发布时间】:2017-03-13 18:50:17
【问题描述】:
我正在尝试对依赖于 Json.Net 和 SignalR 的项目进行单元测试。由于某种原因,我无法运行许多这些单元测试。自从我将 Json.Net 更新到 9.0.0 版后,我收到一个异常消息:
在 mscorlib.dll 中发生了“System.IO.FileLoadException”类型的异常,但未在用户代码中处理
附加信息:无法加载文件或程序集“Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed”或其依赖项之一。找到的程序集的清单定义与程序集引用不匹配。 (HRESULT 异常:0x80131040)
我可以用一个干净的项目重现这种行为。以下是重现的步骤:
- 使用 Visual Studio 2015 更新 3
- 转到文件->新建->项目
- 选择模板->Visual C#->测试->单元测试项目
- 右键项目,选择属性,将框架改为.NET Framework 4.6.1
- 在项目的根目录下创建一个名为 project.json 的新文件
- 将project.json的内容设置为:
.
{
"dependencies": {
"Microsoft.AspNet.SignalR.Client": "2.2.1",
"Microsoft.AspNet.SignalR.Core": "2.2.1",
"Newtonsoft.Json": "9.0.1"
},
"frameworks": {
"net451": {},
"net461": {}
},
"runtimes": {
"win": {},
"win-x86": {},
"win-x64": {}
}
}
- 将 UnitTest1.cs(由脚手架提供)更改为以下内容:
.
using Microsoft.VisualStudio.TestTools.UnitTesting;
namespace UnitTestProject1
{
[TestClass]
public class UnitTest1
{
[TestMethod]
public void TestMethod1()
{
var conman = Microsoft.AspNet.SignalR.GlobalHost.ConnectionManager;
}
}
}
- 关闭并重新打开 Visual Studio(这是使用 project.json 加载依赖项所必需的)
- 重建项目
- 选择测试方法,按CTRL+R+T
应该会出现错误。
我不知道如何解决这个问题。我尝试过使用绑定 bindingRedirects,但没有什么能让错误消失。重新安装包没有任何意义,因为我可以用一个干净的项目重现它。
我担心我将不得不恢复到 Json.Net 的早期版本
【问题讨论】:
-
那是 Json.NET 的非常老的版本。将旧版本添加到您的测试项目或升级所有项目以使用相同的版本。您是否检查过 NuGet 包管理器中的“更新”或“合并”选项卡?
-
同时检查对 Json.NET 的直接引用,即不通过 NuGet
-
@PanagiotisKanavos 我正在用一个干净的项目在一个全新的解决方案中重现这个,除了单元测试之外什么都没有。
-
ASP.NET 模板不包含最新的 Json.NET 引用。发生错误是因为 web 应用 引用了旧的 Json.NET 版本。删除任何现有的非 Nuget 引用并将包添加到所有项目。我过去遇到过同样的问题
-
模板也可能使用 JSON.NET 的 GAC 引用。这就是为什么你应该检查现有的引用,然后确保你只使用 NuGet
标签: c# unit-testing visual-studio-2015 json.net signalr