问题描述
最近自己做的一个项目,计划开始使用NuGet来管理dll,但是遇到一个奇怪,但是结果证明是个乌龙的问题。
新建一个WebApi项目,使用NuGet管理第三方dll,其中有引用Newtonsoft.Json,版本为5.0.6,确认项目引用也没有问题如下图。
接着将项目上传到GitHub上,上传的时候会忽略NuGet生成的packages目录。
然后,从GitHub克隆项目到本地,在编译项目,还没有还原NuGet引用时,Newtonsoft.Json引用的是系统的,如下图。
然后,重新编译项目,还原NuGet引用,同时也生成了packages目录。但是Newtonsoft.Json显示还是引用的系统的4.5.0版本,但是查看生成的bin目录,的确是NuGet引用的5.0.6版本。
所以,问题来了,为什么没有引用NuGet的packages目录中的,却还是引用系统的呢?
分析思路
首先,查看MSBuild的生成输出,发现copy的路径没有问题,如下图。
然后,能想到的是使用程序集重定向,强制它使用5.0.6版本,所以在web.config中加入下面的代码。
重新生成项目, 发现项目引用的依旧是系统的,如下图。
到这里,能想到的方法基本都想了,但为什么项目还是显示引用系统的dll呢。
然后就问同事,同事过来就刷新了一下项目,居然就ok了,显示正确地引用了NuGet的packages目录。
原来只是没有刷新,项目上显示引用旧的而已,哎,真是个大乌龙啊!
所以在这里总结出来,以免以后还犯这样的低级错误。