升級到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