演练:使用 Web 部署包部署 Web 应用程序项目(第 2 部分,共 4 部分)

本演练是一系列演练中的第二个演练,这些演练阐释如何使用部署包来部署 Web 应用程序项目。 有关此系列演练的更多信息,请参见演练:使用 Web 部署包部署 Web 应用程序项目(第 1 部分,共 4 部分)

在本演练中,将更改 AdventureWorksLT 数据库并部署所做的更改。 然后将更改网页并部署这些更改,但不部署数据库更改。 本演练阐释了以下任务:

  • 重新部署已部署的数据库。

  • 从部署中排除已部署的数据库。

  • 为“调试”生成配置创建包。

  • 使用 IIS 管理器在本地计算机上安装包。

系统必备

有关系统必备组件的列表,请参见演练:使用 Web 部署包部署 Web 应用程序项目(第 1 部分,共 4 部分)

为数据库更改配置部署

如果您要将一个数据库更改(结构或数据)部署到已部署的 Web 应用程序中,并且如果您不必保留已在部署的数据库中输入的数据,则可使用自动生成的脚本来重新部署该数据库。 但默认情况下,自动生成的脚本在目标计算机上创建(或重新创建)数据库对象之前不会丢弃这些对象。 因此,您必须指定应包含的 Drop 语句,以避免在脚本尝试创建已存在的数据库对象时将导致出现的错误。

在本演练的这一部分中,将对 AdventureWorksLT 数据库的结构进行更改。 然后重新部署该 Web 应用程序。 更改数据库部署设置,使自动为 AdventureWorksLT 数据库生成的脚本包含 Drop 语句,并使得部署期间不运行其他数据库脚本。

在下面的过程中,将在数据库和 Default.aspx 文件中将 Color 字段的名称更改为 Appearance。

更改数据库字段的名称

  1. 在**“服务器资源管理器”**中,展开“App_Data”文件夹,然后双击 AdventureWorksLT2008_Data.mdf。

    这将在**“服务器资源管理器”**窗口中打开该数据库。

  2. 在**“服务器资源管理器”**中展开 Tables 文件夹。

  3. 右击**“Product (SalesLT)”表,然后单击“打开表定义”**。

  4. 将**“Color”**列的名称更改为 Appearance,如下面的示例所示:

    数据库表属性窗口

  5. 保存该表并关闭**“表定义”**窗口。

  6. 打开 Default.aspx 文件。

  7. GridView 控件中,找到**“Color”**列的 BoundField 元素,将 DataField、SortExpression 和 HeaderText 属性的值从 Color 更改为 Appearance,如下面的示例所示:

    <asp:BoundField DataField="Appearance" HeaderText="Appearance"
        SortExpression="Appearance" />
    
  8. 保存并关闭 Default.aspx。

  9. 按 Ctrl-F5 测试这些更改。

    将显示主页,并且**“Color”列已重命名为“Appearance”**,如下图所示:

    带有外观栏的 Adventure Works 主页

在下面的过程中,配置部署,使其为 AdventureWorksLT 数据库生成 Drop 语句。 为此,您必须修改项目文件,因为该设置在 Visual Studio UI 中不可用。

指定应包含 Drop 语句

  1. 在**“解决方案资源管理器”中,右击项目,然后单击“在 Windows 资源管理器中打开文件夹”**。

    将为项目文件夹打开**“Windows 资源管理器”**窗口。

  2. 使用文本编辑器(如记事本)打开 AdventureWorks.csproj 或 AdventureWorks.vbproj。

  3. 查找针对 Debug 生成配置和 AnyCPU 平台的 PropertyGroup 元素。

    该元素包含您在项目的**“属性”设置中的“打包/发布 Web”“打包/发布 SQL”**选项卡上输入的设置。

  4. 在 PropertyGroup 元素中,查找名为 AWLTConnectionString-Deployment 的 ObjectGroup 元素。

    该元素包含**“打包/发布 SQL”**选项卡上与 AdventureWorksLT 数据库有关的设置。

  5. 在 ObjectGroup 元素中,将 ScriptDropsFirst="True" 特性添加到第一个 Object 元素中包含的 PreSource 元素。

    下面的示例演示了 PropertyGroup 元素,该元素包含更改的 PreSource 元素。 (项目文件中该元素的某些详细信息与该示例中所述内容略微不同。)

    <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
      ...
      <PublishDatabaseSettings>
      ...
        <Objects>
          ...
          <ObjectGroup Name="AWLTConnectionString-Web.config" Order="2">
            <Destination Path="..." />
            <Object Type="dbFullSql">
              <PreSource Path="..." ScriptSchema="True" 
                ScriptData="True" CopyAllFullTextCatalogs="False"  
                ScriptDropsFirst="True"/>
              <Source Path="..." Transacted="True" />
            </Object>
            <Object Type="dbFullSql" Enabled="True">
                <Source Path="...AdventureWorksGrant.sql" 
                  Transacted="True" />
            </Object>
          </ObjectGroup>
        </Objects>
      </PublishDatabaseSettings>
    </PropertyGroup>
    
  6. 保存并关闭 AdventureWorks.csproj 或 AdventureWorks.vbproj 文件。

  7. 如果您看到**“检测到文件修改”对话框(如下图所示),则请单击“重载”**按钮。

    “检测到文件修改”对话框

在下面的过程中,将指定不应运行数据库脚本。 这包括自动为 ApplicationServices 数据库生成的脚本和 AdventureWorksGrant.sql 脚本。

指定部署过程中不应运行任何其他脚本

  1. 在项目的**“属性”页上,单击“打包/发布 SQL”**选项卡。

  2. 在**“配置”列表中,确保选中“活动(调试)”[Active (Debug)]**。

  3. 在**“数据库项”网格中,确保选中“ApplicationServices-Deployment”**行。

  4. 在**“数据库脚本”网格中,清除其“脚本路径”列中包含“自动生成的框架和数据”[Auto-generated Schema and Data]的行所对应的“包括”**复选框,如下图所示:

    不带脚本的“打包/发布 SQL”选项卡

  5. 在**“数据库项”网格中,选择“AWLTConnectionString-Deployment”**行。

  6. 在**“数据库脚本”网格中,清除具有 AdventureWorksGrant.sql 脚本的行所对应的“包括”**复选框。

  7. 保存并关闭**“属性”**页。

部署数据库更改

在下面的过程中,将通过创建一个包,然后使用 IIS 管理器将该包导入 IIS 来部署项目。

创建一个包并将该包导入 IIS

  1. 在**“项目”菜单中,单击“生成部署包”**。

    Visual Studio 将生成项目,然后创建部署包。 将为 AdventureWorksLT 数据库创建包含 Drop 语句的脚本。 不为 ApplicationServices 数据库创建任何脚本。

  2. 通过执行以下步骤,将部署包的路径复制到 Windows 剪贴板:

    1. 如果**“解决方案资源管理器”中未显示 obj 文件夹,则请单击“显示所有文件”**按钮。

    2. 依次展开 obj 文件夹、Debug 文件夹和 Package 文件夹。

    3. 选择 AdventureWorks.zip 文件。

    4. 在**“属性”窗口中,复制“完整路径”**字段的值。

  3. 在 Windows“控制面板”中,单击**“管理工具”,再单击“Internet Information Services (IIS)管理器”**。

  4. 在 IIS 管理器的**“连接”面板中,展开计算机的节点,再展开“Sites”文件夹,然后选择“默认网站”**。

  5. 在**“操作”面板中,单击“导入应用程序”**超链接。

  6. 在**“选择包”对话框的“包路径”**框中,粘贴部署包路径。

  7. 单击**“下一步”**。

  8. 在**“选择包的内容”对话框中,单击“下一步”**。

  9. 在**“输入应用程序包信息”对话框中,单击“下一步”**。

  10. 在**“覆盖现有文件”对话框中,单击“下一步”**。

    完成程序包安装后,**“安装进度和摘要”**对话框显示仅更新了一个数据库,如下图所示:

    “安装进度和摘要”对话框

  11. 通过打开浏览器并转到以下 URL 来测试应用程序:

    https://localhost/AdventureWorks

    显示 Default.aspx 页。 该页看上去与在 Visual Studio 中运行项目时一样。 产品表显示一个**“Appearance”列而非“Color”**列。 这说明已成功部署 AdventureWorksLT 数据库更改。

重新部署而不更改数据库

通常,数据库结构的更改不像 Web 应用程序的其他部分的更改那么频繁。 在本演练的这一部分中,将更改一个网页并重新部署 Web 应用程序,但不部署数据库更改。

在下面的过程中,将 Default.aspx 页上的 AdventureWorksLT 产品表中第一列的标题从**“Name”更改为“Product”**。

对应用程序进行更改

  1. 打开 Default.aspx 文件。

  2. 将**“Name”**列的 BoundField.HeaderText 属性更改为“Product”,如下面的示例所示:

    <asp:BoundField DataField="Name" HeaderText="Product" 
      SortExpression="Name" />
    
  3. 保存并关闭文件。

在下面的过程中,将更改数据库部署设置以确保 Visual Studio 不生成任何数据库脚本。

禁用数据库部署

  1. 在**“解决方案资源管理器”中右击此项目,然后单击“属性”**。

  2. 选择**“打包/发布 Web”**选项卡。

  3. 清除**“包括在‘打包/发布 SQL’选项卡中配置的所有数据库”**复选框。

  4. 保存并关闭**“属性”**页。

在下面的过程中,将重新部署该应用程序并测试所做的更改。

重新部署并测试应用程序

  1. 在**“项目”菜单中,单击“生成部署包”**。

  2. 将部署包路径复制到 Windows 剪贴板中。

  3. 运行**“Internet Information Services (IIS)管理器”**。

  4. 在 IIS 管理器中选择**“默认网站”**。

  5. 在**“操作”面板中,单击“导入应用程序”**超链接。

  6. 在**“选择包”对话框的“包路径”**框中,粘贴部署包路径。

  7. 单击**“下一步”**。

  8. 在**“选择包的内容”对话框中,单击“下一步”**。

  9. 在**“输入应用程序包信息”对话框中,单击“下一步”**。

  10. 在**“覆盖现有文件”对话框中,单击“下一步”**。

    此时,**“安装进度和摘要”**对话框显示未更新任何数据库,并且仅更新了一个文件。

  11. 通过打开浏览器并转到以下 URL 来测试应用程序:

    https://localhost/AdventureWorks

    Default.aspx 页再次看上去与在 Visual Studio 中运行时一样。 产品表的第一列中的标题**“Product”**说明已成功部署对 Default.aspx 所做的更改。

后续步骤

在此系列演练的第一个演练中,您已将一个文件系统 Web 应用程序项目部署到 IIS Web 应用程序以便在开发计算机上进行测试。 在本演练中,您更改了其中一个数据库的结构、更改了网页并部署了所做的更改。

此系列演练中的下一个演练是演练:使用 Web 部署包部署 Web 应用程序项目(第 3 部分,共 4 部分)。 在该演练中,将创建一个部署包,该包可用于部署到临时环境和生产服务器。

请参见

概念

ASP.NET 部署内容映射