为什么Msbuild不复制Microsoft.AspNet.WebApi.Client引用的Newtonsoft.Json.dll?

时间:2016-02-11 08:29:32

标签: msbuild

我的web项目引用了引用引用Microsoft.AspNet.WebApi.Client程序集的Newtonsoft.Json的projectB。它没有在其他地方引用。问题是我的部署服务器Newtonsoft.Json一旦运行就没有复制到bin目录

C:\Windows\Microsoft.NET\Framework64\v4.0.30319\MSBuild.exe .\src\path.to.Web.projectA.csproj /t:Rebuild /p:Configuration=Release

它最终打破了这个例外:

  

FileNotFoundException:无法加载文件或程序集   'Newtonsoft.Json,Version = 7.0.0.0,Culture = neutral,   PublicKeyToken = 30ad4fe6b2a6aeed'或其中一个依赖项。该   系统找不到指定的文件。

我通过向projectB添加存根代码来解决它:

string json = JsonConvert.SerializeObject(new Something()); 

有人可以描述为什么以前没有复制过吗?

请注意。这些问题似乎没有回答问题或过时或我错过了什么?

1 个答案:

答案 0 :(得分:2)

我在Alex的博文中发表了评论,

  

当间接依赖来自NuGet包(Microsoft.AspNet.WebApi.Client和Newtonsoft.Json)时,它对我不起作用。但http://www.paraesthesia.com/archive/2014/05/09/recursively-copying-indirect-project-dependencies-in-msbuild.aspx/中描述的提示解决了这个问题。我认为它使用了更合适的间接依赖检测方法。

如果您遵循该解决方案,则根本不需要使用存根。

关于dll未被复制的原因,它已被缩小到MSBuild问题(或更多,因为有太多报告相关),微软声称无法修复Connect,

https://connect.microsoft.com/VisualStudio/feedback/details/797034/msbuild-handles-direct-and-transitive-references-differently-for-unused-assembly-references