确定需要部署哪些文件 (C#)
需要从开发环境部署到生产环境的文件部分取决于 ASP.NET 应用程序是使用网站模型还是 Web 应用程序模型生成的。 详细了解这两个项目模型以及项目模型如何影响部署。
简介
部署 ASP.NET Web 应用程序需要将与 ASP.NET 相关的文件从开发环境复制到生产环境。 与 ASP.NET 相关的文件包括 ASP.NET 网页标记和代码以及客户端和服务器端支持文件。 客户端支持文件是由网页引用并直接发送到浏览器的文件,例如图像、CSS 文件和 JavaScript 文件。 服务器端支持文件包括用于处理服务器端请求的文件。 这包括配置文件、Web 服务、类文件、类型化数据集和 LINQ to SQL 文件等。
通常,所有客户端支持文件都应从开发环境复制到生产环境,但复制哪些服务器端支持文件取决于你是将服务器端代码显式编译为程序集 (.dll
文件) ,还是自动生成这些程序集。 本教程重点介绍在将代码显式编译为程序集时需要部署哪些文件,而不是自动执行此编译步骤。
显式编译与自动编译
ASP.NET 网页分为声明性标记和源代码。 声明性标记部分包括 HTML、Web 控件和数据绑定语法;代码部分包含用 Visual Basic 或 C# 代码编写的事件处理程序。 标记和代码部分通常分为不同的文件: WebPage.aspx
包含声明性标记,同时 WebPage.aspx.cs
容纳代码。
请考虑名为 Clock.aspx 的 ASP.NET 页,其中包含一个 Label 控件,该控件的 Text 属性设置为页面加载时的当前日期和时间。 ) 中的 Clock.aspx
声明性标记部分 (将包含 Label Web 控件的标记 -<asp:Label runat="server" id="TimeLabel" />
- 而) 中的 Clock.aspx.cs
代码部分 (将具有以下代码的 Page_Load
事件处理程序:
protected void Page_Load(object sender, EventArgs e)
{
TimeLabel.Text = "The time at the beep is: " + DateTime.Now.ToString();
}
为了使 ASP.NET 引擎为此页面的请求提供服务,必须先编译页面的代码部分 (WebPage.aspx.cs
文件) 。 此编译可以显式或自动进行。
如果编译显式发生,则整个应用程序的源代码将编译为一个或多个程序集, (.dll
位于应用程序 Bin
目录中) 文件。 如果编译自动发生,则生成的自动生成的程序集默认放置在Temporary ASP.NET
“文件”文件夹中(可在版本>中找到<%WINDOWS%\Microsoft.NET\Framework\
),尽管此位置可通过 <compilation>
中的 Web.config
元素进行配置。 使用显式编译时,必须执行一些操作将 ASP.NET 应用程序的代码编译为程序集,此步骤在部署之前发生。 使用自动编译,首次访问资源时,编译过程将发生在 Web 服务器上。
无论使用哪种编译模型,所有 ASP.NET 页 (WebPage.aspx
) 文件的标记部分都需要复制到生产环境。 使用显式编译时,需要复制 文件夹中的程序集 Bin
,但不需要复制 ASP.NET 页的代码部分 (WebPage.aspx.cs
文件) 。 使用自动编译,需要复制代码部分文件,以便代码存在,并且可以在访问页面时自动编译。 每个 ASP.NET 网页的标记部分都包含一个 @Page
指令,该指令具有指示页面的关联代码是否已显式编译或是否需要自动编译的属性。 因此,生产环境可以无缝地使用任一编译模型,你无需应用任何特殊的配置设置来指示使用显式编译或自动编译。
表 1 总结了在使用显式编译与自动编译时要部署的不同文件。 请注意,无论使用哪种编译模型,都应始终在 Bin
文件夹中部署程序集(如果该文件夹存在)。 文件夹 Bin
包含特定于 Web 应用程序的程序集,其中包括使用显式编译模型时的已编译源代码。 该 Bin
目录还包含来自其他项目的程序集以及可能正在使用的任何开源或第三方程序集,这些程序集需要在生产服务器上。 因此,作为一般经验法则,在部署时将 Bin
文件夹复制到生产环境。 (如果使用自动编译模型,并且未使用任何外部程序集,则不会有目录 Bin
- 没关系!)
编译模型 | 部署标记部分文件? | 部署源代码文件? | 在 Bin 目录中部署程序集? |
---|---|---|---|
显式编译 | 是 | 否 | 是 |
自动编译 | 是 | 是 | 是 (如果存在) |
表 1: 部署的文件取决于所使用的编译模型。
走下记忆巷
使用哪种编译方法部分取决于如何在 Visual Studio 中管理 ASP.NET 应用程序。 因为。NET 在 2000 年推出时,Visual Studio 有四个不同版本 - Visual Studio .NET 2002、Visual Studio .NET 2003、Visual Studio 2005 和 Visual Studio 2008。 Visual Studio .NET 2002 和 2003 使用 Web 应用程序项目模型托管 ASP.NET 应用程序。 Web 应用程序项目模型的主要功能包括:
- 构成项目的文件在单个项目文件中定义。 Visual Studio 不会将项目文件中未定义的任何文件视为 Web 应用程序的一部分。
- 使用显式编译。 生成项目会将项目中的代码文件编译为放置在
Bin
文件夹中的单个程序集。
当 Microsoft 发布 Visual Studio 2005 时,他们放弃了对 Web 应用程序项目模型的支持,并将其替换为网站项目模型。 网站项目模型通过以下方式将自身与 Web 应用程序项目模型区分开来:
- 而不是使用单个项目文件来拼写项目的文件,而是使用文件系统。 简而言之,web 应用程序文件夹 (或子文件夹中) 的任何文件都被视为项目的一部分。
- 在 Visual Studio 中生成项目不会在
Bin
目录中创建程序集。 相反,生成网站项目会报告任何编译时错误。 - 支持自动编译。 网站项目通常是通过将标记和源代码复制到生产环境来部署的,尽管代码可以预编译 (显式编译) 。
Microsoft 在发布 Visual Studio 2005 Service Pack 1 时恢复了 Web 应用程序项目模型。 但是,Visual Web Developer 继续仅支持网站项目模型。 好消息是,Visual Web Developer 2008 Service Pack 1 中已删除此限制。 现在,可以使用 Web 应用程序项目模型或网站项目模型在 Visual Studio (和 Visual Web Developer) 中创建 ASP.NET 应用程序。 这两种型号各有优缺点。 请参阅 Web 应用程序项目简介:比较网站项目和 Web 应用程序项目 ,以比较这两个模型,并帮助确定哪种项目模型最适合你的情况。
浏览示例 Web 应用程序
本教程的下载内容包括一个名为“书评”的 ASP.NET 应用程序。 该网站模仿某人可能创建的爱好网站,以与在线社区共享他们的书评。 此 ASP.NET Web 应用程序非常简单,包含以下资源:
Web.config
,应用程序的配置文件。母版页 (
Site.master
) 。七个不同的 ASP.NET 页:
~
/Default.aspx
- 网站的主页。~
/About.aspx
- “关于网站”页面。~
/Fiction/Default.aspx
- 列出已审阅的小说书籍的页面。- ~
/Fiction/Blaze.aspx
- 理查德·巴赫曼小说《 火焰》的评论。
- ~
~/
Tech/Default.aspx
- 列出已审阅的技术书籍的页面。- ~/
Tech/CYOW.aspx
- 查看 创建自己的网站。 - ~/
Tech/TYASP35.aspx
- 24 小时内自学 ASP.NET 3.5 的回顾。
- ~/
Styles 文件夹中的三个不同的 CSS 文件。
四个图像文件 - 由 ASP.NET 徽标和三本评论书籍封面的图像 - 都位于 文件夹中
Images
。一个
Web.sitemap
文件,用于定义站点地图,并用于显示根目录和 和Fiction
Tech
文件夹中的页面中的菜单Default.aspx
。一个名为
BasePage.cs
的类文件,用于定义基Page
类。 此类通过基于页面在站点地图中的位置自动设置Title
属性来扩展 类的功能Page
。 简而言之,扩展 (而不是System.Web.UI.Page
) 的任何 ASP.NET 代码隐藏类BasePage
都将根据其在站点地图中的位置将其标题设置为值。 例如,查看 ~/Tech/CYOW.aspx
页面时,标题设置为“主页:技术:创建自己的网站”。
图 1 显示了通过浏览器查看书评网站的屏幕截图。 在这里,你会看到页面 ~/Tech/TYASP35.aspx
,该页面回顾了在 24 小时内自学 ASP.NET 3.5 一书。 跨越页面顶部和左侧列中的菜单的痕迹导航基于 中 Web.sitemap
定义的站点地图结构。 右上角的图像是文件夹中的书籍封面图像 Images
之一。 网站的外观是通过“样式”文件夹中 CSS 文件拼写出的级联样式表规则定义的,而总体页面布局是在母版页 Site.master
中定义的。
图 1: 书评网站提供对各种标题的评论 (单击以查看全尺寸图像)
此应用程序不使用数据库;每个评审都作为应用程序中的一个单独的网页实现。 本教程 (,接下来的几个教程) 演练如何部署没有数据库的 Web 应用程序。 但是,在将来的教程中,我们将增强此应用程序以在数据库中存储评论、读者评论和其他信息,并探讨需要执行哪些步骤才能正确部署数据驱动的 Web 应用程序。
注意
这些教程重点介绍如何使用 Web 主机提供程序托管 ASP.NET 应用程序,而不探讨 ASP 等辅助主题。NET 的站点地图系统或使用基 Page
类。 有关这些技术的详细信息,以及整个教程中涵盖的其他主题的更多背景信息,请参阅每个教程末尾的“进一步阅读”部分。
本教程的下载包含两个 Web 应用程序副本,每个副本都作为不同的 Visual Studio 项目类型实现:BookReviewsWAP(Web 应用程序项目)和 BookReviewsWSP(网站项目)。 这两个项目都是使用 Visual Web Developer 2008 SP1 创建的,并使用 ASP.NET 3.5 SP1。 若要使用这些项目,请先将内容解压缩到桌面。 若要打开 Web 应用程序项目 (BookReviewsWAP) ,请导航到 BookReviewsWAP 文件夹,然后双击解决方案文件 BookReviewsWAP.sln
。 若要打开“网站项目” (BookReviewsWSP) ,请启动 Visual Studio,然后从“文件”菜单中选择“打开网站”选项,浏览到 BookReviewsWSP
桌面上的文件夹,然后单击“确定”。
本教程的其余两个部分介绍在部署应用程序时需要复制到生产环境的文件。 接下来的两个教程 - 使用 FTP 部署站点 和使用 Visual Studio 部署站点 - 介绍了将这些文件复制到 Web 主机提供程序的不同方法。
确定要为 Web 应用程序项目部署的文件
Web 应用程序项目模型使用显式编译 - 每次生成应用程序时,项目的源代码都会编译为单个程序集。 此编译包括 ASP.NET 页面的代码隐藏文件 (~/Default.aspx.cs
、~/About.aspx.cs
等) ,以及 BasePage.cs
类。 生成的程序集BookReviewsWAP.dll命名,位于应用程序的 Bin
目录中。
图 2 显示了构成 Book Reviews Web 应用程序项目的文件。
图 2:解决方案资源管理器列出了构成 Web 应用程序项目的文件
若要部署使用 Web 应用程序项目模型开发的 ASP.NET 应用程序首先生成应用程序,以便将最新的源代码显式编译到程序集中。 接下来,将以下文件复制到生产环境:
- 包含每个 ASP.NET 页的声明性标记的文件,例如 ~/
Default.aspx
、~/About.aspx
等。 此外,复制任何母版页和用户控件的声明性标记。 - 程序集 (
.dll
文件夹中)Bin
文件。 无需复制程序数据库文件 (.pdb
) 或目录中可能找到Bin
的任何 XML 文件。
无需将 ASP.NET 页的源代码文件复制到生产环境,也不需要复制 BasePage.cs
类文件。
注意
如图 2 所示, BasePage
类作为项目中的类文件实现,位于名为 的 HelperClasses
文件夹中。 编译项目时,文件中的代码 BasePage.cs
与 ASP.NET 页的代码隐藏类一起编译到单个程序集中, BookReviewsWAP.dll.
ASP.NET 具有一个名为 App_Code
的特殊文件夹,用于保存网站项目的类文件。 文件夹中的代码 App_Code
会自动编译,因此不应与 Web 应用程序项目一起使用。 相反,应将应用程序的类文件放在名为 HelperClasses
、 或 Classes
的普通文件夹中或类似的文件夹中。 或者,可以将类文件放在单独的类库项目中。
除了复制文件夹中与 ASP.NET 相关的标记文件和程序集 Bin
外,还需要复制客户端支持文件(图像和 CSS 文件)以及其他服务器端支持文件和 Web.config
Web.sitemap
。 无论使用显式编译还是自动编译,都需要将这些客户端和服务器端支持文件复制到生产环境。
确定要为网站项目文件部署的文件
网站项目模型支持自动编译,此功能在使用 Web 应用程序项目模型时不可用。 使用显式编译,必须将项目的源代码编译为程序集,并将该程序集复制到生产环境。 另一方面,使用自动编译,只需将源代码复制到生产环境,运行时会根据需要对其进行编译。
Visual Studio 中的“生成”菜单选项同时存在于 Web 应用程序项目和网站项目中。 生成 Web 应用程序项目会将项目的源代码编译到位于 目录中的单个程序集中 Bin
;生成网站项目会检查是否有任何编译时错误,但不创建任何程序集。 若要部署使用网站项目模型开发的 ASP.NET 应用程序,只需将相应的文件复制到生产环境,但我建议先生成项目,以确保没有编译时错误。
图 3 显示了构成书评网站项目的文件。
图 3:解决方案资源管理器列出了构成网站项目的文件
部署网站项目涉及将所有与 ASP.NET 相关的文件复制到生产环境,其中包括 ASP.NET 页、母版页和用户控件的标记页及其代码文件。 还需要复制任何类文件,例如 BasePage.cs。 请注意, BasePage.cs
该文件位于 App_Code
文件夹中,该文件夹是网站项目用于类文件的特殊 ASP.NET 文件夹。 还需要在生产环境中创建特殊文件夹,因为开发环境中 文件夹中的类文件 App_Code
必须复制到生产上的 App_Code
文件夹中。
除了复制 ASP.NET 标记和源代码文件外,还需要复制客户端支持文件(图像和 CSS 文件)以及其他服务器端支持文件 和 Web.config
Web.sitemap
。
注意
网站项目还可以使用显式编译。 未来的教程将介绍如何显式编译网站项目。
总结
部署 ASP.NET 应用程序需要将必要的文件从开发环境复制到生产环境。 需要同步的精确文件集取决于 ASP.NET 应用程序的代码是显式编译还是自动编译。 采用的编译策略受 Visual Studio 是否配置为使用 Web 应用程序项目模型或网站项目模型管理 ASP.NET 应用程序的影响。
Web 应用程序项目模型使用显式编译,并将项目代码编译为 文件夹中的单个程序集 Bin
。 部署应用程序时,ASP.NET 页的标记部分和文件夹的内容 Bin
必须向上推送到生产环境;应用程序中的源代码(例如代码文件和代码隐藏类)不需要复制到生产环境。
网站项目模型默认使用自动编译,尽管可以显式编译网站项目,我们将在以后的教程中看到。 部署使用自动编译的 ASP.NET 应用程序需要将标记部分 和 源代码复制到生产环境。 首次请求代码时,会在生产环境中自动编译代码。
现在,我们已经检查了需要在开发和生产环境之间同步哪些文件,我们已准备好将 Book Reviews 应用程序部署到 Web 主机提供程序。
编程愉快!
深入阅读
有关本教程中讨论的主题的详细信息,请参阅以下资源: