【发布时间】:2023-03-05 13:39:01
【问题描述】:
我有一个最近成功升级到 .NET Core 1.0 RTM 的 ASP.NET Core 1.0 类库。我使用它来实现一些自定义 Json 输入和输出格式化程序以包含在 ASP.NET Core 管道中,因此引用 Newtonsoft.Json 9.0.1 包来处理 JsonSerializerSettings 对象之类的东西。项目编译没有错误。
但是,我遇到了一些运行时问题,我想通过单步执行 Newtonsoft 源代码来进一步调查这些问题。在 .NET Core 中,我已经习惯了使用其源代码替换 Nuget 包引用的灵活性,只需在 global.json 文件中添加对已签出源的引用(正如 this 博客文章中所解释的那样)。这适用于来自 github 的 Microsoft AspNetCore 源文件,我经常使用它。
出于某种原因,我无法使用 Newtonsoft 源代码来实现这一点。我已经从 github 克隆了 Newtonsoft 源代码,并检查了我的项目引用的确切 9.0.1 标签。然后,我将源位置添加到我的解决方案中的 global.json 文件中。此后,Visual Studio 2015 立即找到 Newtonsoft 项目并成功将其解析为本地引用。我什至可以在我的项目引用中看到 Newtonsoft 引用的图标已经改变,因为它使用来自同一解决方案的项目而不是来自 nuget 服务器的 dll。此外,如果引用无法正确解析,我看不到任何警告或错误,就像您有时会发现的那样。
但是,当我尝试编译项目时,我现在收到以下编译错误:
错误 CS0012 类型“JsonSerializer”在未引用的程序集中定义。您必须添加对程序集“Newtonsoft.Json, Version=9.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed”的引用。
这个错误对我来说毫无意义,因为项目引用解决得很好,没有错误,如果我删除源引用并让它从 nuget 获取编译版本,项目编译得很好。这是我项目的project.json:
{
"version": "0.2.0",
"description": "...",
"authors": [ "..." ],
"buildOptions": {
"xmlDoc": true
},
"frameworks": {
"net451": { },
"netstandard1.6": {}
},
"dependencies": {
"Microsoft.AspNetCore.Mvc": "1.0.0",
"Microsoft.AspNetCore.Mvc.Formatters.Json": "1.0.0",
"Microsoft.Extensions.Logging.Abstractions": "1.0.0",
"Newtonsoft.Json": "9.0.1"
}
}
有什么想法吗?
【问题讨论】:
-
即使包的版本为 9.0.1,从 project.json 中它说
1.0.0-*(github.com/JamesNK/Newtonsoft.Json/blob/9.0.1/Src/… 确定这是否会混淆构建...尝试删除 project.json 中的版本信息文件并重试.. -
您是否尝试过使用
"Newtonsoft.Json": { "target": "project" }? -
@KiranChalla 是的,我也注意到了这一点,并且已经将 json.net 项目中的版本更改为 9.0.1,这是解析引用所必需的。但即使使用已解析的引用,构建错误仍然存在。
-
@svick 也尝试了您的建议,但不幸的是它没有任何区别。
标签: c# .net json.net .net-core asp.net-core-1.0