下面的向导将向你展示,如何快速简便地把
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
代码后置模板。