VS2003 WEB應用程序向VS2005的移植
譯自:http://webproject.scottgu.com/VisualBasic/Migration/Migration.aspx
作者:Scott Guthrie.
VS2003 WEB應用程序向VS2005的移植
下面的嚮導將向你展示,如何快速簡便地把VS2003 網絡應用程序移植到VS2005平臺。請詳細閱讀第一至第六條指引,目的是讓你瞭解VS2005的網絡應用程序的運行模式,因爲這和以前BEAT1(和最終版的VS2005存在一定的差異,某些功能在BEAT版裏不支持) 和VS2003的運行模式存在着差異。
利用VS2005的WEB APPLICATION PROJECT PREVIEW 時行VS2003的程序移植
有很多種不同的移植方案,一種默認的移植方式是通過網站應用程序模式。在此,我們利用的是一種非常簡單的移植方案,和默認方式的原理一樣,你不必要去對程序結構做任何修改。
唯一要做的是忽略API引用的警告。
在使用VS2005最終版時,當你打開VS2003的工程項目時,它會提示你,是否對當前打開的項目進行轉換。
自動移植嚮導在第一版中並不支持,但是根據下面的指引,你可達到同樣的效果。一般來說,你可以在15-20以內完成前八個步驟。(在這裏寫的太詳細了,其實每步可能只要1,2分鐘就可完成)。
請仔細按照步驟進行操作,如果在移植當中遇到問題(成功最好),那麼請來信,我會在下一次的更新中回答你的疑問。
STEP 0:安裝VS2005 網絡應用程序工程項目預攬
如果你安裝的是VS2005 最終版,那麼,你就不必要再進行安裝了,因了這項功能已經內置在VS2005裏面了,如果你用的VS2005沒有此項功能,你可以點擊下載並安裝,在使用前請仔細閱讀說明。
STEP 1:備份你要轉換的VS2003項目文件
在嘗試以下步驟之前,請確認你已經對你要轉換的項目就行了完整的備份,這樣以備不測。因爲在轉換的過程當中,我們很難保證不出問題,一但出了問題,我們可以利用這個備份進行迴轉。
STEP 2:打開你的VS2003項目,確保項目運行正常
在進行轉換之前,還要對你的項目做最後的編譯和測試,保證沒有錯誤之後,纔可下面的步驟。這樣做是爲了在以後的步驟執行當中減少不必要麻煩(特別是,如果因爲最後一次的文件移動所導致的問題)。
STEP 3:修改.sln 和 .vbproj 項目文件,使之成爲類庫文件
如果你使用的是VS2005最終版,那麼就不必要做如下更換,因爲VS2005會自動幫你完成以下工作。如果是VS2005第一版,請仔細閱讀並認真執行。
1) 關閉VS2003解決方案
2) 用記事本打開.sln文件,此文件是基於文本的,裏面記錄着詳細的關於解決方案的內容。當你打開一個解決方案文件時,會類似以下的文本內容:
Microsoft Visual Studio Solution File, Format Version 8.00
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PortalVBVS", "http://localhost/PortalVBVS/PortalVBVS.vbproj", "{345F0E9A-24F3-451C-B8EE-6B3796797BC8}"
ProjectSection(ProjectDependencies) = postProject
EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ClassLibrary1", "ClassLibrary1/ClassLibrary1.csproj", "{50CC4DB3-6AE3-4A01-A3C8-000DB914F9CF}"
ProjectSection(ProjectDependencies) = postProject
EndProjectSection
EndProject
Global
GlobalSection(SolutionConfiguration) = preSolution
Debug = Debug
Release = Release
EndGlobalSection
GlobalSection(ProjectConfiguration) = postSolution
{345F0E9A-24F3-451C-B8EE-6B3796797BC8}.Debug.ActiveCfg = Debug|.NET
{345F0E9A-24F3-451C-B8EE-6B3796797BC8}.Debug.Build.0 = Debug|.NET
{345F0E9A-24F3-451C-B8EE-6B3796797BC8}.Release.ActiveCfg = Release|.NET
{345F0E9A-24F3-451C-B8EE-6B3796797BC8}.Release.Build.0 = Release|.NET
{50CC4DB3-6AE3-4A01-A3C8-000DB914F9CF}.Debug.ActiveCfg = Debug|.NET
{50CC4DB3-6AE3-4A01-A3C8-000DB914F9CF}.Debug.Build.0 = Debug|.NET
{50CC4DB3-6AE3-4A01-A3C8-000DB914F9CF}.Release.ActiveCfg = Release|.NET
{50CC4DB3-6AE3-4A01-A3C8-000DB914F9CF}.Release.Build.0 = Release|.NET
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
EndGlobalSection
GlobalSection(ExtensibilityAddIns) = postSolution
EndGlobalSection
EndGlobal
手工對該文件進行修改,把http://URL定義更改爲文件引用類型路徑,如上所示就是把http://localhost/PortalVBVS/PortalVBVS.vbproj 改爲PortalVBVS/PortalVBVS.vbproj 注意,這裏是 “/” 不是 ”/”,因爲這裏是文件路徑. 更改的結果如下:
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PortalVBVS", "PortalVBVS/PortalVBVS.vbproj", "{345F0E9A-24F3-451C-B8EE-6B3796797BC8}"
ProjectSection(ProjectDependencies) = postProject
EndProjectSection
EndProject
3) 利用記事本對工程文件進行更改
<VisualStudioProject>
<VisualBasic
ProjectType = "Web"
ProductVersion = "7.10.3077"
SchemaVersion = "2.0"
ProjectGuid = "{345F0E9A-24F3-451C-B8EE-6B3796797BC8}"
>
把WEB 更改爲 LOCAL 後,保存退出.
<VisualStudioProject>
<VisualBasic
ProjectType = "Local"
ProductVersion = "7.10.3077"
SchemaVersion = "2.0"
ProjectGuid = "{345F0E9A-24F3-451C-B8EE-6B3796797BC8}"
>
4) 最後一步,也是關鍵的一步,刪除與工程相關的.webinfo文件.如果項目名稱是LGP.vbproj ,那麼就要把LGP.vbproj.webinfo文件刪除.
STEP 4 重新在VS2003裏打開工程,檢查項目是否成功打開和編譯是否正確
一但你完成了以上幾個步驟,那麼你的Web工程在VS2003中會當作類庫看待。他們的意義相同,但是與FrontPage 服務器擴展的連接將不存在。
在VS2003中重新打開,檢測是否編譯完好,注意你必須直接打開解決方案文件,你已經不能再用服務器擴展形式《HTTP://》打開了。因爲你剛纔把工程文件轉換成了類庫文件了。確保你的工程都會在解決方案瀏覽器窗口打開,然後選擇,BuildàBuild Solution 並保證完全編譯正確。這很容易完成,最容易出錯是的是引用項目的路徑問題。或者是.webinfo文件沒有刪除。如果出現這種錯誤,關掉VS,排除錯誤,再進行打開,編譯。
SETP 5:用VS2005打開並執行移植
關閉當前打開的VS2003,打開VS2005。選擇 文件à打開文件,選擇你要進行轉換的工程解決方案。VS2005會自動運行項目移植嚮導。
根據嚮導進行移植,VS2005會把工程文件轉換爲MSBuild類型的文件(VS2005中工程文件專用的格式)。在此過程中會自動產生一個XML格式的轉換概要,一般來說,這個文件保存在你當前解決方案的同一目錄下。如果在以後的編譯過程過程出現了錯誤,你可以通過查看此文件來追蹤錯誤。
STEP 6:轉換你的工程項目
現在,你的工程已經轉換成了VS2005 MSBuild格式的工程文件,下一步就是要添加一個原數據值,讓VS2005把它們當成VS2005工程文件來對待。可以這樣做:
1) 首先完全保存你打開的文件和已完成轉換的文件
2) 關閉解決方案
3) 用記事本打開工程文件進行再次編輯,這次你的工程文件會是如下格式(MSBUILD):
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<ProjectType>Local</ProjectType>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProductVersion>8.0.50727</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{22C5DF64-8114-41F3-92DF-DBC285835584}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>WebApplication10</RootNamespace>
<AssemblyName>WebApplication10</AssemblyName>
</PropertyGroup>
刪除<ProjectType>行,並用下列值代替:
<ProjectTypeGuids>{349c5851-65df-11da-9384-00065b846f21};{F184B08F-C81C-45F6-A57F-5ABD9991F28F}</ProjectTypeGuids>
這個值可以讓VS2005知道,不能把它當作普通的類庫工程,而是WEB應用程序。
4) 保存並關閉WEB工程文件,重新打開解決方案文件。
STEP 7:利用IIS安裝WEB應用程序
一般情況下,你的Web工程會運行在VS內置的Web服務器(aka Cassini).當然,你很想充分利用它的優越性,最簡單的方法是在IIS裏運行。你可以這樣做:
1) 在解決方案裏右鍵Web應用程序的根結點,選擇屬性頁,然後打開Web標籤,選擇“Use IIS Web Server”項,輸入 Http://工程項目路徑
最後,關閉屬性頁,保存項目文件。
2) 在解決方案中右鍵,選擇作爲啓動項目。這樣在你按F5(或Ctrl-F5)啓動解決方案時,會把這個項目作爲啓動項目。
3) 運行微軟的IIS管理工具,打開你剛剛輸入的工程路徑屬性頁,選擇 ASP.NET標籤,確保應用程序使用的是ASP.NET2.0配置(默認情況下是1.1)。
如果你用的是Window server2003的IIS6,還應當注意不要把它放在ASP.NET1.1的應用程序池中,否則會出現在同一個程序池裏加載兩個不同版本的CLR錯誤。如果必要,你要新建一個程序池來防止衝突。
STEP 8: 處理XHTML的適應性問題
在默認情況下,VS2005會自動生成並檢測XHTML標記語言,這可以幫你建立通用的網站應用程序,並且減少你的網頁在呈現時的誤錯。
不妙的是,VS2003不會自動生成XHTML標記,所以你應當注意在VS2003應用程序裏的XHTML配置部分。可以這樣來配置:
1) 切換當前配置,把HTML檢驗變成IE6檢驗(這在VS2003中是默認的)。選擇工具à選項菜單項,在彈出的對話框中,選擇文本框選項,把檢驗目標換成IE6,並且取消“顯示錯誤”項。
2) 你還應當考慮在配置文件中加入下面的標籤,這樣可以避免在你的頁面中看到不同的呈現結果。
<system.web>
<xhtmlConformance mode="Legacy" />
</system.web>
STEP 9:編譯,運行工程項目
現在你可以編譯你的工程了。在這個階段最容易發生的錯誤是新類名稱的編譯衝突。比如:現在的ASP.NET有內置的菜單和樹控件(就像Profile,MemberShip和RoleManagement APIs) ,所以會看到一個‘類型不明確’的錯誤。(注:編譯器會列出所有的錯誤詳細信息)。如果這樣,你應當更新你的控件引用名稱,用全稱來代替。比如:把TreeView 改爲myProject.Mycontrol.TreeView。
另外一個問題是關於VB的,Global將被視爲關鍵字在VB2005中,這意味着你不能再用它來命名類。在VS2003中,Global.asax文件默認是全局類。在升級的過程中,所有的引用都會被自動的重命名爲全局的。如果在你的頁面類或是控件類中,引用了全局類,那麼你要手工的加上“Add”字符在你引用的類名前。
你還可能遇到其它的關於API的變更問題,請訪問這個頁面,可以幫你瞭解更詳細的情況。
一旦你的編譯工作正確無誤,那麼你就可以在IIS中運行調試了。
STEP 10:PARTIAL類的轉化
當你完成上述步驟時,你的內聯類和其它類將都不會被修改。它們將像在VS2003裏一樣。這樣可以讓移植變得簡單。你也可以隨意選擇你的代碼格式,這樣需要你手工的去更新你的代碼後置類。
當然,你也可以利用在VS2005中的新類模式Partial。這樣讓你的代碼看着更簡捷,更有邏輯性。這樣就把當前的代碼後置文件變換成了兩個分別的文件:一個是代碼和事件處理,另一個是爲頁面中申明的控件。想了解詳細的新類模式,請查看此頁。
根據下面的步驟轉換你的當前類
1) 在確認變換前,一定要工程編譯沒有任何錯誤
2) 在你的項目瀏覽器點右鍵,選擇“更新WEB應用程序”,這樣會讓你的.aspx頁面和.ascx控件頁的後置代碼自動更新爲Partial模式,並生成相應的 .Designer.vb代碼。
接下來,你要重新編譯項目,這樣不會出現錯誤(我所遇到的錯誤情況大多是,你在代碼後置類裏修改了控件申明,在更新嚮導中會錯誤地處理它們)。如果你有這樣的錯誤,根據錯誤信息,查找相關的頁面,查看代碼,更改錯誤。
注意:還有一種更高級的選擇,就是一個頁面一個頁面的更新。只需要要選擇你想更新的頁面,右鍵à選擇“更新應用程序”項。這樣你可以更細緻地觀察更新過程。
當你新增頁面時,它會自動默認選用Partial代碼後置模板。