确定需要部署哪些文件 (VB)

作者 :Scott Mitchell

下载 PDF

需要从开发环境部署到生产环境的文件在一定程度上取决于 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.vb 容纳代码。

考虑一个名为 Clock.aspx 的 ASP.NET 页,其中包含一个 Label 控件,其 Text 属性设置为页面加载时的当前日期和时间。 ) 中 Clock.aspx (声明性标记部分将包含标签 Web 控件的标记 - <asp:Label runat="server" id="TimeLabel" /> 而) 中的 Clock.aspx.vb 代码部分 (将具有以下代码的 Page_Load 事件处理程序:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As  System.EventArgs) Handles Me.Load
    TimeLabel.Text =  "The time at the beep is: " & DateTime.Now.ToString()
End Sub

为了使 ASP.NET 引擎为此页面的请求提供服务,必须先编译页面的代码部分 (WebPage.aspx.vb 文件) 。 此编译可以显式发生,也可以自动进行。

如果编译显式发生,则整个应用程序的源代码将编译为一个或多个程序集, .dll (位于应用程序的 Bin 目录中) 文件。 如果编译自动发生,则生成的自动生成的程序集默认放置在 Temporary ASP.NET Files 文件夹中,该文件夹可在 中找到%WINDOWS%\Microsoft.NET\Framework\<version>,尽管此位置可通过 <中的编译>元素Web.config进行配置。 使用显式编译时,必须执行一些操作,将 ASP.NET 应用程序的代码编译为程序集,此步骤在部署之前发生。 使用自动编译,首次访问资源时,编译过程将发生在 Web 服务器上。

无论使用哪种编译模型,都需要将) 文件 (WebPage.aspx 所有 ASP.NET 页的标记部分复制到生产环境。 使用显式编译时,需要复制文件夹中的程序集 Bin ,但不需要复制 ASP.NET 页的代码部分 (WebPage.aspx.vb) 文件。 使用自动编译,需要复制代码部分文件,以便代码存在,并且可以在访问页面时自动编译。 每个 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
  • 文件夹中的三个不同的 CSS 文件 Styles

  • 四个图像文件 - 一个由 ASP.NET 徽标和三个审阅书籍封面的图像 - 都位于 文件夹中 Images

  • 文件Web.sitemap,用于定义站点地图,用于在根目录和 FictionTech 文件夹中的页面Default.aspx中显示菜单。

  • 一个名为 BasePage.vb 的类文件,用于定义基 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 文件 Styles 拼出的级联样式表规则定义的,而总体页面布局是在母版页 Site.master中定义的。

书评网站提供各种标题的评论

图 1:书评网站提供各种标题的评论 (单击以查看全尺寸图像)

此应用程序不使用数据库;每个评审都作为应用程序中的一个单独的网页实现。 本教程 (,接下来的几个教程) 演练如何部署没有数据库的 Web 应用程序。 但是,在将来的教程中,我们将增强此应用程序以在数据库中存储评论、读者注释和其他信息,并探讨需要执行哪些步骤才能正确部署数据驱动的 Web 应用程序。

注意

这些教程重点介绍如何使用 Web 主机提供程序托管 ASP.NET 应用程序,并且不探索 ASP 等辅助主题。NET 的站点地图系统或使用基页类。 有关这些技术的详细信息,以及有关本教程中涵盖的其他主题的更多背景信息,请参阅每个教程末尾的“进一步阅读”部分。

本教程的下载有两个 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.vb、~/About.aspx.vb等) ,以及 BasePage.vb 类。 生成的程序集名为 BookReviewsWAP.dll ,位于应用程序的 Bin 目录中。

图 2 显示了构成书评 Web 应用程序项目的文件。

解决方案资源管理器列出了构成 Web 应用程序项目的文件。

图 2:解决方案资源管理器列出了构成 Web 应用程序项目的文件

注意

如图 2 所示,ASP.NET 页的代码隐藏文件不会显示在 Visual Basic Web 应用程序项目的解决方案资源管理器中。 若要查看页面的代码隐藏类,请右键单击解决方案资源管理器中的页面,然后选择“查看代码”。

若要部署使用 Web 应用程序项目模型开发的 ASP.NET 应用程序,首先生成应用程序,以便将最新的源代码显式编译到程序集中。 接下来,将以下文件复制到生产环境:

  • 包含每个 ASP.NET 页的声明性标记的文件,例如 ~/Default.aspx、~/About.aspx等。 此外,复制任何母版页和用户控件的声明性标记。
  • 程序集 (.dll 文件夹中) Bin 文件。 无需复制程序数据库文件 (.pdb) 或目录中可能找到 Bin 的任何 XML 文件。

无需将 ASP.NET 页的源代码文件复制到生产环境,也不需要复制 BasePage.vb 类文件。

注意

如图 2 所示, BasePage 类作为项目中的类文件实现,位于名为 的 HelperClasses文件夹中。 编译项目时,文件中的代码 BasePage.vb 与 ASP.NET 页的代码隐藏类一起编译到单个程序集 BookReviewsWAP.dll中。 ASP.NET 有一个名为 App_Code 的特殊文件夹,用于保存网站项目的类文件。 文件夹中的代码 App_Code 会自动编译,因此不应与 Web 应用程序项目一起使用。 相反,应将应用程序的类文件放在名为 HelperClasses、 或 Classes的普通文件夹中或类似的文件夹中。 或者,可以将类文件放在单独的类库项目中。

除了复制文件夹中与 ASP.NET 相关的标记文件和程序集 Bin 外,还需要复制客户端支持文件(图像和 CSS 文件)以及其他服务器端支持文件和 Web.configWeb.sitemap。 无论使用显式编译还是自动编译,都需要将这些客户端和服务器端支持文件复制到生产环境。

确定要为网站项目文件部署的文件

网站项目模型支持自动编译,此功能在使用 Web 应用程序项目模型时不可用。 使用显式编译,必须将项目的源代码编译为程序集,并将该程序集复制到生产环境。 另一方面,使用自动编译,只需将源代码复制到生产环境,然后运行时根据需要对其进行编译。

Visual Studio 中的“生成”菜单选项同时存在于 Web 应用程序项目和网站项目中。 生成 Web 应用程序项目会将项目的源代码编译为目录中 Bin 的单个程序集;生成网站项目会检查任何编译时错误,但不创建任何程序集。 若要部署使用网站项目模型开发的 ASP.NET 应用程序,只需将相应的文件复制到生产环境,但建议首先生成项目,以确保没有编译时错误。

图 3 显示了构成书评网站项目的文件。

解决方案资源管理器列出了构成网站项目的文件。

图 3:解决方案资源管理器列出了构成网站项目的文件

部署网站项目涉及将所有与 ASP.NET 相关的文件复制到生产环境,其中包括 ASP.NET 页、母版页和用户控件的标记页及其代码文件。 还需要复制任何类文件,例如 BasePage.vb。 请注意, BasePage.vb 该文件位于 App_Code 文件夹中,该文件夹是网站项目用于类文件的特殊 ASP.NET 文件夹。 还需要在生产环境中创建特殊文件夹,因为开发环境中文件夹中的类文件 App_Code 必须复制到生产时的文件夹 App_Code

除了复制 ASP.NET 标记和源代码文件外,还需要复制客户端支持文件(映像和 CSS 文件)以及其他服务器端支持文件和 Web.configWeb.sitemap

注意

网站项目还可以使用显式编译。 未来的教程将介绍如何显式编译网站项目。

总结

部署 ASP.NET 应用程序需要将必要的文件从开发环境复制到生产环境。 需要同步的精确文件集取决于 ASP.NET 应用程序的代码是显式编译还是自动编译。 采用的编译策略受 Visual Studio 配置为使用 Web 应用程序项目模型还是网站项目模型管理 ASP.NET 应用程序的影响。

Web 应用程序项目模型使用显式编译,并将项目代码编译为 文件夹中的单个程序集 Bin 。 部署应用程序时,必须将 ASP.NET 页的标记部分和文件夹的内容 Bin 推送到生产环境;应用程序中的源代码(例如代码文件和代码隐藏类)不需要复制到生产环境。

网站项目模型默认使用自动编译,但可以显式编译网站项目,我们将在将来的教程中看到。 部署使用自动编译的 ASP.NET 应用程序需要将标记部分 源代码复制到生产环境。 首次请求代码时,会在生产环境中自动编译代码。

现在,我们已经了解了需要在开发和生产环境之间同步哪些文件,我们已准备好将 Book Reviews 应用程序部署到 Web 主机提供程序。

编程快乐!

深入阅读

有关本教程中讨论的主题的详细信息,请参阅以下资源: