用源代码替换对 Json.NET 的引用时无法编译项目



我有一个ASP.NET Core 1.0类库,最近成功升级到.NET Core 1.0 RTM。我用它来实现一些自定义的Json输入和输出格式化程序,以包括在ASP.NET Core管道中,因此引用Newtonsoft.Json 9.0.1包来处理JsonSerializerSettings对象。该项目编译时没有出现错误。

然而,我遇到了一些运行时问题,我想通过浏览Newtonsoft源代码来进一步研究这些问题。在.NET Core中,我已经习惯了用源代码替换Nuget包引用的灵活性,只需在global.json文件中添加一个对已签出源代码的引用(正如本博客文章中很好地解释的那样)。这对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=30Ad4fe6b2a6eed"的引用。

这个错误对我来说毫无意义,因为项目引用解决得很好,没有错误,如果我删除源引用,让它从nuget获得编译版本,那么项目编译得很好。这是我项目的儿子:

{
    "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"
    }
}

有什么想法吗?

这是因为"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>

相关内容

  • 没有找到相关文章

最新更新