2013年11月22日星期五

Bug in Entity Framework 6 w/ SQL Server 2012

若你的程式有使用EF6 + SQL Server 2012,很大機會會遭遇兩個錯誤:
Sys.WebForms.PageRequestManagerServerErrorException: The provider did not return a ProviderManifest instance.
Could not determine storage version; a valid storage connection or a version hint is required.

以我的情況來說,是ASP.NET 4.5 Webforms Project,有部份頁面的GridView或WebService是有使用SQLDataSource和EntityDataSource,
在升級到EF6後,就會出現上述的錯誤。



上Google搜尋,並沒有統一的答案,而Microsoft Connect上的Bug Report還是未解決狀態。

一輪苦戰之後,最後找到一個解決方法,就是把Data Model (*.edmx) 中的ProviderManifestToken的值,由"2012"設回"2008",再Rebuild Solution就OK。

2013年11月17日星期日

Clean & Complete Uninstall Visual Studio 2012

Visual Studio Team現在採用的開發模式為Agile (敏捷開發方法),而新版本推出的週期亦由以往三年縮短至一至兩年

但對開發者來說,唯一問題就是VS不能好像Firefox/Chrome的升級方式去安裝新版本,VS必須安裝為獨立產品。
這就出現了一個作業系統出現了多餘的VS版本。

現在情況跟以前不同,以前VS2003, 2005, 2008, 2010的時候,有必要保留舊版本,因為當時VS相互分別比較大,而且亦未必有需要把Project升級至新版本,拿回舊版VS開啟就好了。
而VS2013跟VS2012的Project相容,基本上安裝VS2013後,VS2012已沒必要留在電腦中。

大家都知道Microsoft的重量級產品,如Visual Studio,SQL Server,SharePoint Server或Dynamic AX等等,都盡可能不要亂去Uninstall。
Uninstall後有大量殘餘物在系統或Registry中,亦有很多Shared元件跟其他產品之用,對於有系統潔癖的人(例如我)來說,是不能容許的。
而且另一個衍生問題就是Reinstall 有機會失敗,SQL Server已經是好例子,我多次遭遇這個問題

或者太多人反映問題,微軟終於在VS2012中加入UnInstall Utility。

微軟把這個程序叫做
Forcible Uninstall
http://support.microsoft.com/kb/2771441/EN-US#Force
可以把所有VS2012相關的安裝項目連元件一併刪除。

而操作方法是,下載相應版本的ISO,Mount進系統中,打開CMD,
輸入: D:\vs_ultimate.exe /uninstall /force
就會自動進行一個叫"Microsoft Visual Studio 2012 Pre-Clean Tool"的反安裝程序,
如你是Professional,就下載Pro版的ISO,而Command Line就是
D:\vs_professional.exe /uninstall /force,如此類推。

其實Visual Studio 2013的,我都試過,但很奇怪,結果是不成功。
連程序名字都不同,2013的叫"Microsoft Visual Studio 2012 Post-Clean Tool",暫時亦沒有官方文件証明2013有這個選項,至少上述的KB2771441都沒說明。