最近自己做的一個(gè)項(xiàng)目,計(jì)劃開始使用NuGet來管理dll,但是遇到一個(gè)奇怪,但是結(jié)果證明是個(gè)烏龍的問題。
新建一個(gè)WebApi項(xiàng)目,使用NuGet管理第三方dll,其中有引用Newtonsoft.Json,版本為5.0.6,確認(rèn)項(xiàng)目引用也沒有問題如下圖。

![clipboard[1] clipboard[1]](http://s1.VeVb.com/20151016/d3dx4nq3rgc02.png)
接著將項(xiàng)目上傳到GitHub上,上傳的時(shí)候會(huì)忽略NuGet生成的packages目錄。
然后,從GitHub克隆項(xiàng)目到本地,在編譯項(xiàng)目,還沒有還原NuGet引用時(shí),Newtonsoft.Json引用的是系統(tǒng)的,如下圖。
![clipboard[2] clipboard[2]](http://s1.VeVb.com/20151016/z13nxm1c4e402.png)
然后,重新編譯項(xiàng)目,還原NuGet引用,同時(shí)也生成了packages目錄。但是Newtonsoft.Json顯示還是引用的系統(tǒng)的4.5.0版本,但是查看生成的bin目錄,的確是NuGet引用的5.0.6版本。
![clipboard[3] clipboard[3]](http://s1.VeVb.com/20151016/gef0rk0exin02.png)
所以,問題來了,為什么沒有引用NuGet的packages目錄中的,卻還是引用系統(tǒng)的呢?
首先,查看MSBuild的生成輸出,發(fā)現(xiàn)copy的路徑?jīng)]有問題,如下圖。
![clipboard[4] clipboard[4]](http://s1.VeVb.com/20151016/owf30dyenxa02.png)
然后,能想到的是使用程序集重定向,強(qiáng)制它使用5.0.6版本,所以在web.config中加入下面的代碼。
![clipboard[5] clipboard[5]](http://s1.VeVb.com/20151016/mot30om11ry03.png)
重新生成項(xiàng)目, 發(fā)現(xiàn)項(xiàng)目引用的依舊是系統(tǒng)的,如下圖。
![clipboard[6] clipboard[6]](http://s1.VeVb.com/20151016/wwpc2fhn0qp03.png)
到這里,能想到的方法基本都想了,但為什么項(xiàng)目還是顯示引用系統(tǒng)的dll呢。
然后就問同事,同事過來就刷新了一下項(xiàng)目,居然就ok了,顯示正確地引用了NuGet的packages目錄。
原來只是沒有刷新,項(xiàng)目上顯示引用舊的而已,哎,真是個(gè)大烏龍啊!
所以在這里總結(jié)出來,以免以后還犯這樣的低級錯(cuò)誤。
新聞熱點(diǎn)
疑難解答
圖片精選