2012年5月25日 星期五

Visual Studio 2010 更新 NuGet Package Manager 出現錯誤


一早上班就如同往常一般的開啟 VS2010 準備一天的 Coding 工作,而開啟 VS2010 之後就出現有擴充套件的更新通知,

image

開啟擴充管理員就看到原來是 NuGet Package Manager 有新版本要做更新,

image

我目前所使用的 NuGet Package Manager 版本是 1.7.30402.9028,雖然說也才更新版本不久,

但是基於已經變成不用 NuGet 就不會在 VS2010 做專案、寫程式的我,我一定是會更新的,

但就在下載更新後並安裝時竟然出現一個錯誤訊息給我……

image

 


看到安裝失敗的錯誤訊息後就照著訊息內容開啟詳細資訊,看看有什麼比較確切的錯誤原因,

image

其中比較確切的就是說:

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 然後按下那個「解除安裝」按鍵

image

正當我以為會如常一般的正常解除,沒想到竟然出現……

image

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 小時前才編輯過的內容,

image

這裡面就說 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

image

 

http://docs.nuget.org/docs/release-notes/nuget-1.8

image

 

 

好,我就在這邊測試給大家看看,當取得 hotfix 檔案後,解壓縮會有一個「VS10SP1-KB2581019-x86.exe」檔案,執行它,

image

按下「下一步」按鍵之後就開始一段時間不算短的安裝,安裝完成之後重新開啟 VS2010,然後開啟 Extension Manager,

先嘗試去更新 NuGet Package Manager,

image

不過這個更新還是一樣遇到同樣的錯誤,看看錯誤的詳細資訊:

image

這一次就沒有出現簽章錯誤的訊息了,但還是出現「安裝錯誤 : System.IO.IOException: 當檔案已存在時,無法建立該檔案。

既然這樣的話,就去解除安裝吧(為了確保 hotfix 是功能可行,所以我關閉 VS2010 並且重新執行安裝 hotfix)

結果呢?

還是一樣,一樣得到這個錯誤訊息:

image

 

XD! 難道我就跟 NuGet 1.8 無緣嗎?

 


嘗試三

就在嘗試過前面兩種方式之後,看到 Nuget 的 「NuGet Docs」 中的 Reference 項目下有個「Known Issues」,

image

這裡面就有針對「當檔案已存在時,無法建立該檔案。」這個問題的說明,

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,
but some files were left behind. To work around this issue:

  1. Exit Visual Studio
  2. Open the following folder (it might be on a different drive on your machine)

    C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\Extensions\
    Microsoft Corporation\NuGet Package Manager\<version>\
  3. Delete all the files with the .deleteme extensions.

  4. Re-open Visual Studio

After following these steps, you should be able to continue.

 

那就照著上面的步驟來做一次,依據指示的路徑位置找到 NuGet Package Manager 的目錄,

image

然後就是放大絕,把 NuGet 舊版本給砍了! 記得也要把 「NuGet Package Manager」這個目錄也要砍…

砍了之後就是重新開啟 VS2010,此時在 Extension Manager 中的已安裝擴充功能還是可以看到 NuGet,那麼就把它給解除安裝,

SNAGHTML91d74e

此時就可以正常的把 NuGet Package Manager 給解除安裝,不會再顯示「當檔案已存在時,無法建立該檔案。」的錯誤訊息。

 

重新安裝 NuGet Package Manager

SNAGHTML947f01

終於安裝完成了……

image

安裝完成後重新啟動 VS2010 ,查看 Extension Manager,我可以用 NuGet Package Manager 1.8 囉……

SNAGHTML99f45f

 


看到最後一定會有人說,怎麼不一開始就是用刪除目錄的大絕招呢?

如果一開始就用大絕招的話,不是可以不必浪費前面兩個嘗試的時間嗎?

對於解決方法的使用,我會優先採用「體制內」的解決方法,所謂體制內就是官網所提供的正確解決方法,

因為有時候一使出大絕招,可能所帶來的影響會更大,我優先採用「不傷身體再講求功效」的解決方式,

不過這個案例看起來…… 還是使出刪除大絕招比較快也比較有效,

所以有同樣問題發生的朋友們,前面兩種方式就不用嘗試了,我已經嘗試給大家看了,大家就不必多走冤枉路了。

 

題外話,NuGet 1.8 還蠻三八的,選單中的選項竟然已經是「VS11化」,原本的圖示變成灰灰的圖示,

我第一次還沒有仔細的看到它,因為已經習慣之前黃色的圖示,變成灰灰的,就完全的走低調風呀 ~~

image

可是人家 VS11 RC 後就會提供多種顏色樣式的選擇了,這樣灰灰的就顯得沒跟上進度。

 

 

以上

2 則留言:

  1. 你真是有心人,所有的過程真是詳細
    托你的福,
    PS: 我也遇到一模一樣的問題,但是我已經是幹聲連連

    回覆刪除
    回覆
    1. 我也是怕我會忘記,所以寫詳細一點,以免日後遇到同樣問題而找不到解決方法,
      同時也將解法提供給有相同問題的朋友。

      刪除

提醒

千萬不要使用 Google Talk (Hangouts) 或 Facebook 及時通訊與我聯繫、提問,因為會掉訊息甚至我是過了好幾天之後才發現到你曾經傳給我訊息過,請多多使用「詢問與建議」(在左邊,就在左邊),另外比較深入的問題討論,或是有牽涉到你實作程式碼的內容,不適合在留言板裡留言討論,請務必使用「詢問與建議」功能(可以夾帶檔案),謝謝。