我有一个ASP.NET Core 1.0类库,我最近成功升级到.NET Core 1.0 RTM。我用它来实现一些自定义的Json输入和输出格式化程序,以包含在ASP.NET Core管道中,因此引用Newtonsoft.Json 9.0.1包来处理JsonSerializerSettings对象之类的东西。该项目编译没有错误。
但是,我有一些运行时问题需要通过逐步完成Newtonsoft源代码来进一步调查。在.NET Core中,我已经习惯了通过简单地在global.json文件中添加对已检出源的引用来替换Nuget包引用及其源代码的灵活性(在this博客文章中有详细解释) 。这适用于来自github的Microsoft AspNetCore源文件,我经常使用它。
出于某种原因,我无法通过Newtonsoft源代码实现这一目标。我从github克隆了Newtonsoft源代码,并检查了我的项目引用的确切9.0.1标记。然后我在我的解决方案中将源位置添加到我的global.json文件中。在此之后,Visual Studio 2015立即找到Newtonsoft项目并成功将其解析为本地引用。我甚至可以在我的项目参考中看到,当它使用来自同一解决方案的项目而不是来自nuget服务器的dll时,Newtonsoft引用的图标已经改变了。此外,我没有看到任何警告或错误,有时您会发现引用是否无法正确解决。
但是,当我尝试编译项目时,我现在得到以下编译错误:
错误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"
}
}
有什么想法吗?
答案 0 :(得分:0)
这样做的原因是“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>