2008年6月10日

利用VS2005升級精靈轉換舊VS2003專案之後無法Compile / 無法自動產生 TestMethod

自從我的XP掛了,換成用Vista(English)之後,誤打誤撞解決了一些問題,除了利用ConvertZ批次將檔案轉換為UTF-8之外(OS現在遇到 Big5 就死給我看),陸續還解決以下兩個問題:

1.Error creating assembly manifest: The Parameter is incorrect.(建立組件清單時發生錯誤: The Parameter is incorrect.)
2.利用 VS2005 轉換精靈將專案從 VS2003 升級後,無法自動產生Test Method。


解法(將 .NET 1.1 專案升級到 .NET 2.0 的建議作法):
1.利用 VS2005 轉換精靈將專案從 VS2003 升級到 VS2005
2.重新建立一個方案,然後利用Add Exist Items的方式,將上述升級過的專案中的檔案複製到新的專案


上述的第一個問題在網路上討論的很少,根本不知道在錯甚麼,唯一看來比較相關的 MS 網頁現在是404 Not Found…由於程式都沒變動,實在不知道為什麼無法Compile,原本以為是 DLL 的 GUID 衝突,但結果也不是。

至於第二個問題也是 Try 很久,除了自動產生Test Method之外,在新增.resx檔案時,
有時候會自動產生對應的Designer.vb,有時候又不會,也是很詭異。


我發現用VS2005產生出來的全新專案 (包括 Class Library、Windows Application、Windows Service 等等),預設的目錄結構跟從VS2003升級來的專案不太一樣,目前注意到的主要是MyProject裡面的內容:










從VS2003升級的話,裡面應該是空的。


我猜想可能是利用升級精靈只是讓VS2005可以有辦法重新Compile舊的程式,但想要增加新功能的時候,運氣不好的話就可能遇到各種奇怪的情況(以我這台Vista的情況來說,根本連Compile都無法執行),按照目前的經驗,重新製作一個完全符合VS2005架構的專案應該是比較保險(& 健康?)的做法。


由於目錄&檔案架構的差異,重新製作新的專案的時候要注意以下幾點:
1.AssemblyInfo.vb這個檔案,在新的專案裡會被放到MyProject之中,因此加入舊有項目的時候要注意不要加入這個檔案,看是要直接複製檔案內容,或是在新的專案的 “屬性” 頁中去調整,要注意GUID要維持一致,
不然會影響每一個Web.config / app.config 中區塊的設定,如下圖:














2.簽署組件的時候 (也就是賦予組件strong name,才能註冊進GAC),也是透過專案屬性頁上的設定來完成,舊的方式是在AssemblyInfo.vb中指定金鑰檔的相對路徑,但是從vs2005的畫面上設定的話,設定值就不知道被藏到哪裡去了(AssemblyInfo.vb中是看不到的),然後KeyFile會被複製到每個專案的目錄下,參考下圖:














其他就沒甚麼太特別的,專案型態要選對(Class Library / Windows Application / Windows Service / Web Service),然後.resx檔案在升級的時候一定會不見 (消失在升級後的專案中,這點實在很煩也很蠢),必須要手動加回來。

以上是將專案從 .NET 1.1 升級到 .NET 2.0 的心得,未來有需要升級到 .NET 3.5 我想也會用一樣的作法(升級精靈 + 新建專案 & Add Exist Item),才不會浪費寶貴的生命...

沒有留言:

Google Spreadsheet 裡用規則運算式

最近因為工作關係,遇到要用 Google Form 及 Google Sheet 所以研究了 Google Sheet 裡的一些 function 怎麼用 首先,分享一下如何在 Google Sheet 裡用規則運算 :D