前幾天移除 Visual Studio 11 Beta 後,我的 Visual Studio 2010 陸續發生了幾個問題,前天的文章已經確定就是移除 Visual Studio 11 Beta 造成的。然而靈異事件昨天又再發生一件,這次是開啟 LINQ to SQL Classes (O/R Designer) 之後無法從「伺服器管理員」拖曳 SQL Server 的資料表進 DBML 設計工具,害我昨天一整晚在重灌 Visual Studio 2010 中、英文版,最氣人的是重灌後還是壞的,又隱約聽到有人說「啊重灌啦」,挖哩勒~ 然後今天又再花幾個小時追查問題,還進行檔案二進位比對,終於找出兇手,成功解決啦。
問題是這樣的,當你新增一個 LINQ to SQL 類別 (也就是所謂的 DBML 檔),會開啟物件關聯式設計工具 (O/R 設計工具),其英文原名是 LINQ to SQL Classes (O/R Designer)
開啟後會出現該設計工具,也能新增 Entity 上去,不過若你從「伺服器總管」拖曳 SQL Server 中的表格到設計工具視窗裡,會發現怎樣都拖曳不動,若在該表格上雙擊滑鼠左鍵,就會發現如下圖的錯誤訊息:找不到指定的模組。 (發生例外狀況於 HRESULT: 0x8007007E)
遇到這種問題真的非常棘手,主要的問題有:
- 錯誤訊息太過於一般,難以追查問題原因
- 這問題並非 Visual Studio 2010 本身的錯誤,使用前天文章所述的方式也無法從 ActivityLog.xml 中看到任何相關的問題。
最後真的查不到,只能用「邏輯分析」的方式來「亂猜一通」了,最直覺的作法就是我把 Visual Studio 2010 重裝行吧?!結果失敗!!!
接下來就要找出 Visual Studio 2010 與 Visual Studio 11 的共通元件,看到底是「少了」哪個組件而引發這個問題,所以我找了一個從未安裝過 Visual Studio 11 的公司同事那邊複製了 C:\Program Files (x86)\Common Files\microsoft shared 目錄下所有檔案回來比對分析,發現真的有許多檔案是不一致的,尤其是組件的版本一樣,但檔案大小卻不太一樣的狀況!
備註:微軟許多產品的共通元件/組件都會放在這個目錄下。
我做了一件事,就是先備份這個目錄下所有檔案,用 Handle.exe 查出有沒有任何該目錄下的檔案被 Lock 住,再把我從同事那邊複製來的整個目錄,蓋掉我的這個 microsoft shared 目錄,結果這問題竟然奇蹟似的好了!
但這個目錄會被所有微軟產品所共用,全部覆蓋可能會衍生許多問題,因為同事的電腦跟我的電腦所安裝的軟體與版本也有可能有不相容的情況,所以我決訂先復原,再逐一尋找問題發生的關鍵組件。
因此,我開啟了 WinMerge 工具,進行一次目錄比對,逐一查看所有不相同的地方,最後還真的被我找到就是以下這個組件:
C:\Program Files (x86)\Common Files\microsoft shared\Visual Database Tools\dsref80.dll
因此,如果你遇到跟我一樣的問題,只要從沒有安裝 Visual Studio 11 Beta 且有安裝 Visual Studio 2010 SP1 的電腦上複製相同目錄下的這個檔案回來覆蓋你的這個檔案,就可以順利解決問題。
當然,你還有一個解法,就是把 Visual Studio 11 Beta 重新再安裝回去,這也不失為一個快速解決的方法啦! ^_^
相關連結