升级到vs 2019后,项目因Newtonsoft.json.dll解析导致编译失败问题的原因分析


最近碰到一个问题,同样一套代码,在有的机器上能成功编译,有的机器上编译失败。初步对比,编译失败的机器装的是vs2019,成功的机器是vs2015。在失败的机器上将vs2019、vs2013卸载,重启后安装vs2015,问题仍然没有解决。

 

 编译失败,但是error数是0。仔细查看输出和警告,会发现以下关键信息:

4>C:\Program Files (x86)\MSBuild\14.0\bin\Microsoft.Common.CurrentVersion.targets(1820,5): warning MSB3275: 未能解析主引用“xxx.xxx.xxx”,因为它对程序集“Newtonsoft.Json, Version=9.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed”具有间接依赖关系,而该程序集是针对“.NETFramework,Version=v4.5”框架生成的。该框架版本高于当前目标框架“.NETFramework,Version=v4.0”。

未能解析主引用“xxx.xxx.xxx”,因为它对程序集“Newtonsoft.Json, Version=9.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed”具有间接依赖关系,而该程序集是针对“.NETFramework,Version=v4.5”框架生成的。该框架版本高于当前目标框架“.NETFramework,Version=v4.0”

 

在google上受到此篇文章(https://blog.csdn.net/youbl/article/details/39080729)启发,用everything把C盘所有Newtonsoft.json.dll删掉后问题解决了!将回收站中所有dll还原一步步排查,发现罪魁祸首是C:\Program Files\IIS\Microsoft Web Deploy V3\Newtonsoft.Json.dll。

 

进一步通过google深究其中原理,找到此篇文章(https://stackoverflow.com/questions/50638711/msbuild-is-replacing-newtonsoft-json-dll-with-an-older-version)。这里的最佳答案的解释是,MSBuild在编译过程中要解析程序集引用,会从一些奇怪的目录下查找dll,包括"C:\Program Files\IIS\Microsoft Web Deploy V3\",这个目录下的Newtonsoft.Json.dll版本与项目的要求(9.0.0.0)一致,但是没有校验它的.netFramework,导致编译失败。

 

想了解更详细的,请阅读参考链接:

https://blog.csdn.net/youbl/article/details/39080729

https://stackoverflow.com/questions/50638711/msbuild-is-replacing-newtonsoft-json-dll-with-an-older-version

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM