gpt4 book ai didi

c# - 无法在单元测试中加载文件或程序集 'Newtonsoft.Json,版本 = 6.0.0.0

转载 作者:太空狗 更新时间:2023-10-29 21:38:09 25 4
gpt4 key购买 nike

我正在尝试对依赖于 Json.Net 和 SignalR 的项目进行单元测试。出于某种原因,我无法运行其中的许多单元测试。自从我将 Json.Net 更新到版本 9.0.0 后,我收到一个异常:

An exception of type 'System.IO.FileLoadException' occurred in mscorlib.dll but was not handled in user code

Additional information: Could not load file or assembly 'Newtonsoft.Json, Version=6.0.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)


我可以使用干净的项目重现此行为。以下是重现的步骤:

  • 使用 Visual Studio 2015 Update 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

错误应该会出现。

我不知道如何解决这个问题。我试过使用绑定(bind) bindingRedirects,但没有任何东西使错误消失。重新安装包没有任何意义,因为我可以用一个干净的项目重现它。

我担心我将不得不恢复到 Json.Net 的早期版本

最佳答案

因此,我让测试项目运行。我不完全确定是什么让它起作用,因为我尝试了多种方法,但我猜它是这两件事的结合:

按照此处所述清除 nuget 缓存:How to clear NuGet package cache using command line?

First, download the nuget command line tool from here.

Next, open a command prompt and cd to the directory to which nuget.exe was downloaded.
...
You can clear all caches with this command:
nuget locals all -clear

从我使用 packages.config 范例而不是 project.json 的项目复制绑定(bind)重定向。

<?xml version="1.0" encoding="utf-8" ?>
<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-9.0.0.0" newVersion="9.0.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>

更新:我有其他项目(包括 UWP 项目)在加载 Newtonsoft.Json 时也遇到问题。最后,我只是恢复到 7.0,我所有的问题都解决了。这个故事的寓意:试图解决依赖关系是痛苦的。

更新:在其他项目中有一些类似的经历之后,似乎从 VS 中选择清理并不总是完全清理 bin\debug 文件夹,手动删除该文件夹似乎有帮助。

关于c# - 无法在单元测试中加载文件或程序集 'Newtonsoft.Json,版本 = 6.0.0.0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40346394/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com