转自 http://blog.sina.com.cn/s/blog_53729e4601014ze9.html
本文介绍如何将现有的 Microsoft Visual Studio 2005 网站项目转换为 Microsoft Visual Studio 2005 Web 应用程序项目。Web 应用程序项目模型使用的概念方法与 Visual Studio .NET 2003 中的 Web 项目相同。该概念方法包括一个项目文件,用于将文件和编译包含到单个程序集中,或将它们排除在外。
要完成转换操作要进行以下步骤:
若要完成转换,您需要:
创建新的 Visual Studio 2008 Web 应用程序项目
转换现有 Visual Studio 2005 网站项目的最佳策略是先在单独的目录中创建一个新的空白 Visual Studio 2008 Web 应用程序项目。这样可避免现有网站文件的任何部分发生更改。它还有利于将现有功能复制到新的 Web 应用程序项目中。
您可以将新项目添加到现有解决方案中,当存在多个要使用的类库项目时,这将是理想的方案。另外,也可以启动 Visual Studio 的新实例并创建新的解决方案和项目。
在新解决方案中创建新的 Visual Studio 2008 Web 应用程序项目
-
在 Visual Studio 2008 中,关闭所有打开的解决方案。
-
在“文件”菜单中单击“新建”,再单击“项目”。
将显示“新建项目”对话框。
-
在“新建项目”对话框的“项目类型”部分中,展开要使用的语言,然后选择“Web”以显示与 Web 相关的模板。
-
选择“ASP.NET Web 应用程序”。
-
键入“名称”、“位置”和“解决方案名称”的值,然后单击“确定”以创建 Web 应用程序项目。
-
创建项目后,请删除自动创建的 Default.aspx 和 Web.config 文件。
将网站项目复制到 Web 应用程序项目中
-
在“解决方案资源管理器”中,右击网站项目,然后选择“在 Windows 资源管理器中打开文件夹”。
-
选择要复制网站项目的文件。
-
右击选定的文件,然后选择“复制”。
-
在 Web 应用程序项目中,右击该 Web 应用程序项目,然后选择“在 Windows 资源管理器中打开文件夹”。
-
将网站项目文件粘贴到 Web 应用程序目录中。
-
在 Web 应用程序项目的“解决方案资源管理器”中,单击“显示所有文件”按钮。
-
在“解决方案资源管理器”中选择新的文件。
-
右击选定的文件,然后单击“包括在项目中”。
Visual Studio 2008 网站项目与 Visual Studio 2008 Web 应用程序项目的一个区别是,网站项目模型会动态生成由工具生成的分部类。
将文件从网站项目复制到 Web 应用程序项目之后,您会发现每个页和用户控件的代码隐藏文件仍与 .aspx、.master 和 .ascx 文件关联。此过程并未生成 .designer.cs 或 .designer.vb 文件。在下一步中,您要转换这些页,以便将其分部类保存在 .designer.cs 或 .designer.vb 文件中。
转换项目文件
Visual Studio 包括一个用于转换 Web 应用程序项目中的页和类以使用其分部类的选项。分部类用于分隔页或用户控件代码隐藏代码中的标记。这些由设计器生成的类都保存在代码隐藏文件之外的一个单独的文件中。
在转换过程中,Visual Studio 2008 将以递归方式检查项目中的每个页、母版页和用户控件,并自动为它们中的每一项生成一个 .designer.cs 文件。此外,Visual Studio 还会更改 .aspx 或 .ascx 文件,以使用 codeBehind 属性代替 codeFile 属性。此命令还会将 App_Code 文件夹重命名为 Old_App_Code。
将页和类转换为使用 Web 应用程序项目中的分部类
-
在“解决方案资源管理器”中,右击包含要转换的页和类的项目根文件夹,然后单击“转换为 Web 应用程序”。
-
生成项目,以查看是否存在任何编译错误。
如果您看到错误,则可以检查两个最常见的原因,如下所述:
如果缺少程序集引用,请打开引用管理器并进行添加。如果使用的是动态生成的类型,请参见本主题后面的“转换声明性强类型数据集” 和“转换配置文件对象代码”。
由于 ASP.NET 2.0 会动态编译 App_Code 文件夹中的所有类,因此不应将编译为 Visual Studio 2008 Web 应用程序的一部分的类存储在该文件夹中。否则,该类将被编译两次。第一次将作为 Visual Studio 2008 Web 应用程序项目程序集的一部分编译,第二次则是由 ASP.NET 在运行时编译。这可能导致“未能加载类型”异常。之所以出现此异常,是因为应用程序中存在重复的类型名称。
正确的方法应是将类文件存储在 App_Code 文件夹之外的项目文件夹中。此操作是通过“转换为 Web 应用程序”命令自动完成的,此命令可将该文件夹重命名为 Old_App_Code。
运行 Web 应用程序项目
现在可以编译并运行应用程序。默认情况下,Visual Studio 2008 将使用内置的 ASP.NET Development Server 运行网站。您也可以将项目配置为使用 Internet 信息服务 (IIS)。若要管理 Web 应用程序项目设置,请右击该项目,再单击“属性”。随后,可以选择“Web”选项卡来配置这些运行时设置。
其他转换选项
将项目转换为 Web 应用程序项目时,还需要考虑其他一些转换选项。这些选项如下:
-
添加命名空间语法。
-
转换声明性强类型数据集。
-
转换配置文件对象代码。
添加命名空间语法
默认情况下,使用 Visual Studio 2008 网站项目模型生成的页和类不会自动包含代码命名空间。但是,使用 Visual Studio 2008 Web 应用程序项目模型生成的页、控件和类会自动包含代码命名空间。将网站项目转换为 Web 应用程序项目时,必须向代码添加命名空间。
例如,当您使用 C# 时,可通过 C# 代码编辑器中的“外侧代码”快捷菜单命令向 Visual Studio 中的现有类添加命名空间。
向现有类添加命名空间
-
打开要修改的代码文件。
-
在源编辑器中选择一个类(或多个类),右击所选的代码,然后单击“外侧代码”。
-
在列表中选择“命名空间”项。
扩展名为 .aspx、.ascx、.master、.ashx、.asmx 和 .asax 的文件包含带有 Inherits 或 Class 属性的指令(例如 @ Page指令),当这些文件是代码隐藏页时,上述属性将列出它们调用的类名。如果向属于这些文件类型的代码隐藏文件中添加了命名空间,则还必须将该命名空间添加到 Inherits 和 Class 声明中。例如,如果向名为 Details.aspx 的代码隐藏文件中添加WebApplication5 命名空间,则还需要将 @ Page 指令的 Inherits 属性从 inherits=Details_aspx 更改为inherits=WebApplication5.Details_aspx。
转换声明性强类型数据集
如果 Visual Studio 2008 网站项目的 App_Code 文件夹中包含强类型数据集类,则还必须执行另一项更改才能修复 Web.config 文件中的 connectionString 元素。此外,还必须为数据集类中的每个 TableAdapter 对象设置connectionString 元素。
修复强类型数据集的 connectionString
-
在“解决方案资源管理器”的 App_Code 文件夹中,右击该数据集类,然后单击“视图设计器”。
将显示该数据集的“设计器”窗口。
-
右击 TableAdapter 对象,然后单击“属性”。
-
选择“Connection”属性,然后通过选择一个可用选项来重置该连接。
更新连接时,连接字符串也将随之更新。
-
对于每个数据集中的每个 TableAdapter 对象,请重复上述步骤。
转换配置文件对象代码
ASP.NET 2.0 增加了对配置文件属性的支持。利用此功能,可以在个性化数据库中存储和检索用户配置文件数据。在 Visual Studio 2008 网站项目中,ASP.NET 会自动向项目中的每个 ASP.NET 网页添加一个 Profile 对象(ProfileCommon 类的实例)。此对象可对应用程序 Web.config 文件的 profile 节中所定义的全部属性提供强类型访问。您可以获取此对象的 IntelliSense 数据,并自动在其中保存和检索值。
例如,应用程序的 Web.config 文件可能包含以下部分。
<profile defaultProvider="AspNetSqlProfileProvider"> <properties> <add name="Teachers" type="Teachers" allowAnonymous="true" /> </properties> </profile>
打开一个 ASP.NET 网站,试图在“设计”视图中对内容页进行编辑时,竟然什么也看不到,不能进行可视化编辑,也无法在代码文件中创建事件处理程序。遇到了这种情况,令人非常困惑。因此想到把ASP.NET网站转换为ASP.NET Web应用程序项目是否能够解决这个问题,结果是肯定的。