VS 2017.NetCore MSBuild自定义任务无法加载Newtonsoft.Json或其他依赖项

VS 2017.NetCore MSBuild自定义任务无法加载Newtonsoft.Json或其他依赖项,msbuild,json.net,nuget,.net-core,visual-studio-2017,Msbuild,Json.net,Nuget,.net Core,Visual Studio 2017,环境 Visual Studio 2017 .NET标准2.0 .NET Framework 4.6.1 MyCustomTask.csproj包含自定义MS生成任务,并有多个目标为.NET完整运行时和.NET核心运行时生成单独的dll Nuget包“Microsoft.Extensions.Configuration.Json”上有一个3级依赖项,该包反过来又依赖于Newtonsoft.Json包。如下图所示 构建一切正常,并且成功生成了MyCustomTask的Nuget包 当我在目标

环境

Visual Studio 2017

.NET标准2.0

.NET Framework 4.6.1

MyCustomTask.csproj包含自定义MS生成任务,并有多个目标为.NET完整运行时和.NET核心运行时生成单独的dll

Nuget包“Microsoft.Extensions.Configuration.Json”上有一个3级依赖项,该包反过来又依赖于Newtonsoft.Json包。如下图所示

构建一切正常,并且成功生成了MyCustomTask的Nuget包

当我在目标项目上安装MyCustomTask Nuget包时,自定义生成任务将在Visual Studio 2017的.NET完整运行时上成功执行,但对于.NET Coredotnet build命令,无法执行自定义生成任务

System.IO.FileLoadException:无法加载文件或程序集'Newtonsoft.Json,版本=10.0.0.0,区域性=中立。

即使我打包所有依赖的DLL并将其放在.netstandard自定义任务DLL的同一目录中,我也会不断收到相同的错误


您对如何解决这个问题有何想法?

在这里为遇到相同问题的人发布解决方案

感谢@MartinUllrich在上面的评论中发布了解决方案。这给我省去了很多麻烦


确保自定义任务继承自
ContextIsolatedTask
,并将依赖程序集复制到与任务程序集相同的目录中。

我认为您需要使用9.*版本的newtonsoft.json,因为msbuild可能已经加载了处理nuget的资产文件所需的程序集,并且msbuild版本中的DLL具有更高版本priority@MartinUllrich,谢谢,但我没有提到newtonsoft.json。我只引用了Micorosoft.Extension.Configuration.Json,它依赖于newtonsoft.Json。我的理解是,对于.NET核心依赖项是从Nuget缓存中解析的,所以当我的Nuget包表示需要(>=10.0.1)时,为什么MSBuild使用旧版本(9.*)?这些依赖项解析策略在MSBuild中没有使用。msbuild仅直接加载
中指定的DLL,如果找不到内容,则尝试从同一目录加载其他DLL。消费包也不需要恢复其他包。在没有.net核心依赖项探测逻辑的“完整框架”msbuild(visual studio)中可以使用相同的msbuild任务OK我向任务dll添加了Newtonsoft.Jason的显式引用,并将其包含在包中,以便dll及其依赖项位于同一文件夹中。我仍然收到相同的错误,您在前面提到,MSBuild版本具有更高的优先级。那我该怎么办呢?如何告诉MSbuild使用最新版本的Newtonsoft.Json(>=10.0.1),以便在任务dll中使用Micorosoft.Extension.Configuration.Json(2.0)!您可以使用来获得一个独立的任务环境