一早上班就如同往常一般的開啟 VS2010 準備一天的 Coding 工作,而開啟 VS2010 之後就出現有擴充套件的更新通知,
開啟擴充管理員就看到原來是 NuGet Package Manager 有新版本要做更新,
我目前所使用的 NuGet Package Manager 版本是 1.7.30402.9028,雖然說也才更新版本不久,
但是基於已經變成不用 NuGet 就不會在 VS2010 做專案、寫程式的我,我一定是會更新的,
但就在下載更新後並安裝時竟然出現一個錯誤訊息給我……
看到安裝失敗的錯誤訊息後就照著訊息內容開啟詳細資訊,看看有什麼比較確切的錯誤原因,
其中比較確切的就是說:
「VSIXInstaller.SignatureMismatc,hException: 'NuGet Package Manager' 的更新版本上的簽章不符合安裝版本上的簽章。因此,擴充管理員無法安裝更新。」
「安裝錯誤 : VSIXInstaller.SignatureMismatchException: 'NuGet Package Manager' 的更新版本上的簽章不符合安裝版本上的簽章。因此,擴充管理員無法安裝更新。」
其實看了也是很模糊,至少有個明確的原因就是「更新版本上的簽章不符合安裝版本上的簽章。因此,擴充管理員無法安裝更新。」
那就依循這個線索到 Google 去尋找答案。
嘗試一
首先就找到 「MicroSoft 技術支援」的解答:
「透過擴充管理員升級 NuGet Package Manager 失敗的可能解決方案 (一點通系列 - MVP 撰寫)」
http://support.microsoft.com/kb/2666202/zh-tw
引用內文:
「本文由微軟最有價值專 MVP TerryChuang 提供。微軟十分感謝 MVP 主動地將他們的經驗與上百萬名其他技術使用者交流。MVP TerryChuang 同時也將此篇文章放在他的部落格內,歡迎您按 此處 瀏覽 MVP TerryChuang 更多的技術文章、經驗分享與觀點。」
好,就照著解答的內文進行操作,第一個步驟就是解除原本安裝的 NuGet Package Manager,
(基本是我開啟 VS2010 已經預設都是使用「系統管理員」身分了)
開啟擴充管理員、在已安裝的擴充功能中找到 NuGet Package Manager 然後按下那個「解除安裝」按鍵
正當我以為會如常一般的正常解除,沒想到竟然出現……
WTF !!!(Welcome To Facebook ?!)
註:我也有看到 MSDN 論壇的一篇發文,「Visual Web Developer 2010 Express + SP1 , 升級 NuGet 失敗?」
基本上這裡面所提及的解決方式就是上述在「Microsoft 技術支援」中 TerryChuang 所提供的方法是如出一轍的。
嘗試二
後來在 stackoverflow 上面找到一篇發問「NuGet Package Manager errors when trying to update」,
雖然這篇問題的發問時間是去年的 12 月,但是下面的解答中卻有個 12 小時前才編輯過的內容,
這裡面就說 NuGet 1.8 的安裝是有可能需要反安裝之前舊版的 NuGet,而最後就說在另一個網頁中可以得到更多的資訊,
「Microsoft 技術支援:Error when you update or install a signed extension in Visual Studio 2010 SP1」
在上面的技術支援網頁中有提出兩種的解決方案,第一種解決方案就不必看了,因為跟上面我所使用的「嘗試一」是一樣的,
於是我就選擇使用第二種的解決方式,下載一個 hotfix 來解決,只不過要下載這個 hotfix 也蠻麻煩的,
為什麼要這樣麻煩呢?這是因為(以下節錄此 hotfix 的申明):
「 此 Hotfix 沒有經過完整的測試。因此,僅提供給系統或電腦發生一個或多個 Microsoft 知識庫文章中描述之相同問題的使用者,這封電子郵件最後的表格中,「KB 文章編號」欄位列出描述這些問題的 Microsoft 知識庫文章。如果您不確定是否有與此 Hotfix 相關的任何特殊相容性或安裝問題,我們建議您等候下次發行的 Service Pack。Service Pack 會包含此 Fix 的完整測試版本。……」
因為 Microsoft 技術支援都已經這樣說了,所以我這邊就不會提供 hotfix 的下載位置,有需要的朋友再自行前往申請並取得檔案位置。
註:其實 NuGet 的網頁上也是有提供這個微軟技術支援的連結,
http://visualstudiogallery.msdn.microsoft.com/27077b70-9dad-4c64-adcf-c7cf6bc9970c
http://docs.nuget.org/docs/release-notes/nuget-1.8
好,我就在這邊測試給大家看看,當取得 hotfix 檔案後,解壓縮會有一個「VS10SP1-KB2581019-x86.exe」檔案,執行它,
按下「下一步」按鍵之後就開始一段時間不算短的安裝,安裝完成之後重新開啟 VS2010,然後開啟 Extension Manager,
先嘗試去更新 NuGet Package Manager,
不過這個更新還是一樣遇到同樣的錯誤,看看錯誤的詳細資訊:
這一次就沒有出現簽章錯誤的訊息了,但還是出現「安裝錯誤 : System.IO.IOException: 當檔案已存在時,無法建立該檔案。」
既然這樣的話,就去解除安裝吧(為了確保 hotfix 是功能可行,所以我關閉 VS2010 並且重新執行安裝 hotfix)
結果呢?
還是一樣,一樣得到這個錯誤訊息:
XD! 難道我就跟 NuGet 1.8 無緣嗎?
嘗試三
就在嘗試過前面兩種方式之後,看到 Nuget 的 「NuGet Docs」 中的 Reference 項目下有個「Known Issues」,
這裡面就有針對「當檔案已存在時,無法建立該檔案。」這個問題的說明,
「Attempting to install or uninstall results in the error "Cannot create a file when that file already exists.”」
For some reason, Visual Studio extensions can get in a weird state where you've uninstalled the VSIX extension,
After following these steps, you should be able to continue. |
那就照著上面的步驟來做一次,依據指示的路徑位置找到 NuGet Package Manager 的目錄,
然後就是放大絕,把 NuGet 舊版本給砍了! 記得也要把 「NuGet Package Manager」這個目錄也要砍…
砍了之後就是重新開啟 VS2010,此時在 Extension Manager 中的已安裝擴充功能還是可以看到 NuGet,那麼就把它給解除安裝,
此時就可以正常的把 NuGet Package Manager 給解除安裝,不會再顯示「當檔案已存在時,無法建立該檔案。」的錯誤訊息。
重新安裝 NuGet Package Manager
終於安裝完成了……
安裝完成後重新啟動 VS2010 ,查看 Extension Manager,我可以用 NuGet Package Manager 1.8 囉……
看到最後一定會有人說,怎麼不一開始就是用刪除目錄的大絕招呢?
如果一開始就用大絕招的話,不是可以不必浪費前面兩個嘗試的時間嗎?
對於解決方法的使用,我會優先採用「體制內」的解決方法,所謂體制內就是官網所提供的正確解決方法,
因為有時候一使出大絕招,可能所帶來的影響會更大,我優先採用「不傷身體再講求功效」的解決方式,
不過這個案例看起來…… 還是使出刪除大絕招比較快也比較有效,
所以有同樣問題發生的朋友們,前面兩種方式就不用嘗試了,我已經嘗試給大家看了,大家就不必多走冤枉路了。
題外話,NuGet 1.8 還蠻三八的,選單中的選項竟然已經是「VS11化」,原本的圖示變成灰灰的圖示,
我第一次還沒有仔細的看到它,因為已經習慣之前黃色的圖示,變成灰灰的,就完全的走低調風呀 ~~
可是人家 VS11 RC 後就會提供多種顏色樣式的選擇了,這樣灰灰的就顯得沒跟上進度。
以上
你真是有心人,所有的過程真是詳細
回覆刪除托你的福,
PS: 我也遇到一模一樣的問題,但是我已經是幹聲連連
我也是怕我會忘記,所以寫詳細一點,以免日後遇到同樣問題而找不到解決方法,
刪除同時也將解法提供給有相同問題的朋友。