聲明,本文介紹的技巧主要針對使用NuGet Package Explorer或Visual Stuio NuGet Packager套件自製NuGet Package且上傳到NuGet私服的場合,如果你只是純粹的NuGet Package使用者,記個書籤或留個印象就好,未來有需要再回來。
先說說我遭遇的困擾,先前曾提過重複發行NuGet Package時版號必須比現有Package版號高,不然會上傳失敗。基本上就讓版號1.0.0、1.0.1、1.0.2逐次遞增就能解決,不是什麼大問題。不過若安裝程序較複雜,常需反覆實驗多次,除了一直要改.nuspec版號,若Package間存在相依性(例如SomeMvcLibrary Packaget 1.0.0指定<dependency id="SomeCoreLibrary" version="1.0.0" />,參考)就更頭痛了。dependency所指定版號為Package之最低版號要求,當SomeCoreLibrary Package失敗重新發佈升到1.0.1,除非SomeMvcLibrary同步修改為<dependency id="SomeCoreLibrary" version="1.0.1" />,自己也重新發佈1.0.1,否則下回安裝SomeMvcLibrary時一併安裝仍是有錯的SomeCoreLibrary Package 1.0.0。
在經歷過A依賴B、B依賴C,C一直測不過,改了又改,改了再改的連鎖改版地獄後,我體悟到「刪除NuGet私服上的舊版,繼續使用同版號發行」才是不傷身體的開發方式。但這又遇到另一個問題,這種做法形同偷吃步,違背「版號相同內容就該相同」的常理,而NuGet內建Cache機制,遇到版號相同時會優先使用Cache裡的內容,於是常出現NuGet私服同版號Package已悄悄更新,使用Visual Studio卻一直安裝有錯舊版本的窘境。
NuGet.exe有個指令可以解決這個惱人問題,下載NuGet.exe(或使用NuGet安裝NuGet.CommandLine Package),執行「nuget locals packages-cache –clear」可清除Cache:(參考:指令說明)
以上指令會一次清除所有Cache,導致其他正常Package的Cache失效。最後我試出來的絕招:開啟使用者資料夾下的.nuget\packages,直接刪除有錯待更新的Package目錄,這應該是最快狠準的做法了。
以上經驗提供NuGet Package打包同業參考。