VS2003 WEB应用程序向VS2005的移植

译自:http://webproject.scottgu.com/VisualBasic/Migration/Migration.aspx

作者:Scott Guthrie.

 

VS2003 WEB应用程序向VS2005的移植

 

下面的向导将向你展示,如何快速简便地把VS2003 网络应用程序移植到VS2005平台。请详细阅读第一至第六条指引,目的是让你了解VS2005的网络应用程序的运行模式,因为这和以前BEAT1(和最终版的VS2005存在一定的差异,某些功能在BEAT版里不支持) VS2003的运行模式存在着差异。

 

利用VS2005WEB 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 server2003IIS6,还应当注意不要把它放在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有内置的菜单和树控件(就像ProfileMemberShipRoleManagement APIs ,所以会看到一个‘类型不明确’的错误。(注:编译器会列出所有的错误详细信息)。如果这样,你应当更新你的控件引用名称,用全称来代替。比如:把TreeView 改为myProject.Mycontrol.TreeView
 

另外一个问题是关于VB的,Global将被视为关键字在VB2005中,这意味着你不能再用它来命名类。在VS2003中,Global.asax文件默认是全局类。在升级的过程中,所有的引用都会被自动的重命名为全局的。如果在你的页面类或是控件类中,引用了全局类,那么你要手工的加上“Add”字符在你引用的类名前。

 

你还可能遇到其它的关于API的变更问题,请访问这个页面,可以帮你了解更详细的情况。

 

一旦你的编译工作正确无误,那么你就可以在IIS中运行调试了。

 

STEP 10PARTIAL类的转化

 

当你完成上述步骤时,你的内联类和其它类将都不会被修改。它们将像在VS2003里一样。这样可以让移植变得简单。你也可以随意选择你的代码格式,这样需要你手工的去更新你的代码后置类。

 

当然,你也可以利用在VS2005中的新类模式Partial。这样让你的代码看着更简捷,更有逻辑性。这样就把当前的代码后置文件变换成了两个分别的文件:一个是代码和事件处理,另一个是为页面中申明的控件。想了解详细的新类模式,请查看此页

 

根据下面的步骤转换你的当前类

 

1)  在确认变换前,一定要工程编译没有任何错误

2)  在你的项目浏览器点右键,选择“更新WEB应用程序”,这样会让你的.aspx页面和.ascx控件页的后置代码自动更新为Partial模式,并生成相应的 .Designer.vb代码。



接下来,你要重新编译项目,这样不会出现错误(我所遇到的错误情况大多是,你在代码后置类里修改了控件申明,在更新向导中会错误地处理它们)。如果你有这样的错误,根据错误信息,查找相关的页面,查看代码,更改错误。

 

注意:还有一种更高级的选择,就是一个页面一个页面的更新。只需要要选择你想更新的页面,右键à选择“更新应用程序”项。这样你可以更细致地观察更新过程。

 

当你新增页面时,它会自动默认选用Partial代码后置模板。

posted @ 2006-03-14 10:11  Henry Liu  阅读(4941)  评论(16编辑  收藏  举报