用其源代码替换对 Json.NET 的引用时无法编译项目
Posted
技术标签:
【中文标题】用其源代码替换对 Json.NET 的引用时无法编译项目【英文标题】:Can't compile project when replacing a reference to Json.NET with its source code 【发布时间】:2016-11-23 21:20:36 【问题描述】:我有一个最近成功升级到 .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 也尝试了您的建议,但不幸的是它没有任何区别。
【参考方案1】:
这是因为“Newtonsoft.Json”是强命名的。
为此,您需要<dependentAssembly>
。这是在旧的 .config 方式中完成的:(<runtime>
)
<dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" />
<bindingRedirect oldVersion="0.0.0.0-9.0.1.0." newVersion="9.0.1.0" />
</dependentAssembly>
【讨论】:
感谢您的建议,您可能是对的,但我不知道如何在 ASP.NET Core 中进行配置。而且看起来我不是唯一一个:***.com/questions/39466304/…以上是关于用其源代码替换对 Json.NET 的引用时无法编译项目的主要内容,如果未能解决你的问题,请参考以下文章