问题描述

最近自己做的一个项目,计划开始使用NuGet来管理dll,但是遇到一个奇怪,但是结果证明是个乌龙的问题。

新建一个WebApi项目,使用NuGet管理第三方dll,其中有引用Newtonsoft.Json,版本为5.0.6,确认项目引用也没有问题如下图。

clipboard

clipboard[1]

接着将项目上传到GitHub上,上传的时候会忽略NuGet生成的packages目录。

然后,从GitHub克隆项目到本地,在编译项目,还没有还原NuGet引用时,Newtonsoft.Json引用的是系统的,如下图。

clipboard[2]

然后,重新编译项目,还原NuGet引用,同时也生成了packages目录。但是Newtonsoft.Json显示还是引用的系统的4.5.0版本,但是查看生成的bin目录,的确是NuGet引用的5.0.6版本。

clipboard[3]

所以,问题来了,为什么没有引用NuGet的packages目录中的,却还是引用系统的呢?

分析思路

首先,查看MSBuild的生成输出,发现copy的路径没有问题,如下图。

clipboard[4]

然后,能想到的是使用程序集重定向,强制它使用5.0.6版本,所以在web.config中加入下面的代码。

clipboard[5]

重新生成项目, 发现项目引用的依旧是系统的,如下图。

clipboard[6]

到这里,能想到的方法基本都想了,但为什么项目还是显示引用系统的dll呢。

然后就问同事,同事过来就刷新了一下项目,居然就ok了,显示正确地引用了NuGet的packages目录。

原来只是没有刷新,项目上显示引用旧的而已,哎,真是个大乌龙啊!

所以在这里总结出来,以免以后还犯这样的低级错误。

posted on 2015-09-16 19:15  永远的麦子  阅读(496)  评论(2编辑  收藏  举报