最近自己做的一個(gè)項(xiàng)目,計(jì)劃開始使用NuGet來管理dll,但是遇到一個(gè)奇怪,但是結(jié)果證明是個(gè)烏龍的問題。
新建一個(gè)WebApi項(xiàng)目,使用NuGet管理第三方dll,其中有引用Newtonsoft.Json,版本為5.0.6,確認(rèn)項(xiàng)目引用也沒有問題如下圖。
接著將項(xiàng)目上傳到GitHub上,上傳的時(shí)候會(huì)忽略NuGet生成的packages目錄。
然后,從GitHub克隆項(xiàng)目到本地,在編譯項(xiàng)目,還沒有還原NuGet引用時(shí),Newtonsoft.Json引用的是系統(tǒng)的,如下圖。
然后,重新編譯項(xiàng)目,還原NuGet引用,同時(shí)也生成了packages目錄。但是Newtonsoft.Json顯示還是引用的系統(tǒng)的4.5.0版本,但是查看生成的bin目錄,的確是NuGet引用的5.0.6版本。
所以,問題來了,為什么沒有引用NuGet的packages目錄中的,卻還是引用系統(tǒng)的呢?
首先,查看MSBuild的生成輸出,發(fā)現(xiàn)copy的路徑?jīng)]有問題,如下圖。
然后,能想到的是使用程序集重定向,強(qiáng)制它使用5.0.6版本,所以在web.config中加入下面的代碼。
重新生成項(xiàng)目, 發(fā)現(xiàn)項(xiàng)目引用的依舊是系統(tǒng)的,如下圖。
到這里,能想到的方法基本都想了,但為什么項(xiàng)目還是顯示引用系統(tǒng)的dll呢。
然后就問同事,同事過來就刷新了一下項(xiàng)目,居然就ok了,顯示正確地引用了NuGet的packages目錄。
原來只是沒有刷新,項(xiàng)目上顯示引用舊的而已,哎,真是個(gè)大烏龍啊!
所以在這里總結(jié)出來,以免以后還犯這樣的低級錯(cuò)誤。
新聞熱點(diǎn)
疑難解答
圖片精選