最近自己做的一個項目,計劃開始使用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目錄。
原來只是沒有刷新,項目上顯示引用舊的而已,哎,真是個大烏龍啊!
所以在這里總結出來,以免以后還犯這樣的低級錯誤。
新聞熱點
疑難解答