但是,我有一些运行时问题,我想通过逐步完成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引用的图标已经改变了.另外,我没有看到任何警告或错误,有时您会发现引用无法正确解析.
但是,当我尝试编译项目时,我现在得到以下编译错误:
Error CS0012 The type ‘JsonSerializer’ is defined in an assembly that is not referenced. You must add a reference to assembly ‘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" } }
有任何想法吗?
解决方法
你需要一个< 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>