演练:使用 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。
更改数据库字段的名称
在**“服务器资源管理器”**中,展开“App_Data”文件夹,然后双击 AdventureWorksLT2008_Data.mdf。
这将在**“服务器资源管理器”**窗口中打开该数据库。
在**“服务器资源管理器”**中展开 Tables 文件夹。
右击**“Product (SalesLT)”表,然后单击“打开表定义”**。
将**“Color”**列的名称更改为 Appearance,如下面的示例所示:
保存该表并关闭**“表定义”**窗口。
打开 Default.aspx 文件。
在 GridView 控件中,找到**“Color”**列的 BoundField 元素,将 DataField、SortExpression 和 HeaderText 属性的值从 Color 更改为 Appearance,如下面的示例所示:
<asp:BoundField DataField="Appearance" HeaderText="Appearance" SortExpression="Appearance" />
保存并关闭 Default.aspx。
按 Ctrl-F5 测试这些更改。
将显示主页,并且**“Color”列已重命名为“Appearance”**,如下图所示:
在下面的过程中,配置部署,使其为 AdventureWorksLT 数据库生成 Drop 语句。 为此,您必须修改项目文件,因为该设置在 Visual Studio UI 中不可用。
指定应包含 Drop 语句
在**“解决方案资源管理器”中,右击项目,然后单击“在 Windows 资源管理器中打开文件夹”**。
将为项目文件夹打开**“Windows 资源管理器”**窗口。
使用文本编辑器(如记事本)打开 AdventureWorks.csproj 或 AdventureWorks.vbproj。
查找针对 Debug 生成配置和 AnyCPU 平台的 PropertyGroup 元素。
该元素包含您在项目的**“属性”设置中的“打包/发布 Web”和“打包/发布 SQL”**选项卡上输入的设置。
在 PropertyGroup 元素中,查找名为 AWLTConnectionString-Deployment 的 ObjectGroup 元素。
该元素包含**“打包/发布 SQL”**选项卡上与 AdventureWorksLT 数据库有关的设置。
在 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>
保存并关闭 AdventureWorks.csproj 或 AdventureWorks.vbproj 文件。
如果您看到**“检测到文件修改”对话框(如下图所示),则请单击“重载”**按钮。
在下面的过程中,将指定不应运行数据库脚本。 这包括自动为 ApplicationServices 数据库生成的脚本和 AdventureWorksGrant.sql 脚本。
指定部署过程中不应运行任何其他脚本
在项目的**“属性”页上,单击“打包/发布 SQL”**选项卡。
在**“配置”列表中,确保选中“活动(调试)”[Active (Debug)]**。
在**“数据库项”网格中,确保选中“ApplicationServices-Deployment”**行。
在**“数据库脚本”网格中,清除其“脚本路径”列中包含“自动生成的框架和数据”[Auto-generated Schema and Data]的行所对应的“包括”**复选框,如下图所示:
在**“数据库项”网格中,选择“AWLTConnectionString-Deployment”**行。
在**“数据库脚本”网格中,清除具有 AdventureWorksGrant.sql 脚本的行所对应的“包括”**复选框。
保存并关闭**“属性”**页。
部署数据库更改
在下面的过程中,将通过创建一个包,然后使用 IIS 管理器将该包导入 IIS 来部署项目。
创建一个包并将该包导入 IIS
在**“项目”菜单中,单击“生成部署包”**。
Visual Studio 将生成项目,然后创建部署包。 将为 AdventureWorksLT 数据库创建包含 Drop 语句的脚本。 不为 ApplicationServices 数据库创建任何脚本。
通过执行以下步骤,将部署包的路径复制到 Windows 剪贴板:
如果**“解决方案资源管理器”中未显示 obj 文件夹,则请单击“显示所有文件”**按钮。
依次展开 obj 文件夹、Debug 文件夹和 Package 文件夹。
选择 AdventureWorks.zip 文件。
在**“属性”窗口中,复制“完整路径”**字段的值。
在 Windows“控制面板”中,单击**“管理工具”,再单击“Internet Information Services (IIS)管理器”**。
在 IIS 管理器的**“连接”面板中,展开计算机的节点,再展开“Sites”文件夹,然后选择“默认网站”**。
在**“操作”面板中,单击“导入应用程序”**超链接。
在**“选择包”对话框的“包路径”**框中,粘贴部署包路径。
单击**“下一步”**。
在**“选择包的内容”对话框中,单击“下一步”**。
在**“输入应用程序包信息”对话框中,单击“下一步”**。
在**“覆盖现有文件”对话框中,单击“下一步”**。
完成程序包安装后,**“安装进度和摘要”**对话框显示仅更新了一个数据库,如下图所示:
通过打开浏览器并转到以下 URL 来测试应用程序:
https://localhost/AdventureWorks
显示 Default.aspx 页。 该页看上去与在 Visual Studio 中运行项目时一样。 产品表显示一个**“Appearance”列而非“Color”**列。 这说明已成功部署 AdventureWorksLT 数据库更改。
重新部署而不更改数据库
通常,数据库结构的更改不像 Web 应用程序的其他部分的更改那么频繁。 在本演练的这一部分中,将更改一个网页并重新部署 Web 应用程序,但不部署数据库更改。
在下面的过程中,将 Default.aspx 页上的 AdventureWorksLT 产品表中第一列的标题从**“Name”更改为“Product”**。
对应用程序进行更改
打开 Default.aspx 文件。
将**“Name”**列的 BoundField.HeaderText 属性更改为“Product”,如下面的示例所示:
<asp:BoundField DataField="Name" HeaderText="Product" SortExpression="Name" />
保存并关闭文件。
在下面的过程中,将更改数据库部署设置以确保 Visual Studio 不生成任何数据库脚本。
禁用数据库部署
在**“解决方案资源管理器”中右击此项目,然后单击“属性”**。
选择**“打包/发布 Web”**选项卡。
清除**“包括在‘打包/发布 SQL’选项卡中配置的所有数据库”**复选框。
保存并关闭**“属性”**页。
在下面的过程中,将重新部署该应用程序并测试所做的更改。
重新部署并测试应用程序
在**“项目”菜单中,单击“生成部署包”**。
将部署包路径复制到 Windows 剪贴板中。
运行**“Internet Information Services (IIS)管理器”**。
在 IIS 管理器中选择**“默认网站”**。
在**“操作”面板中,单击“导入应用程序”**超链接。
在**“选择包”对话框的“包路径”**框中,粘贴部署包路径。
单击**“下一步”**。
在**“选择包的内容”对话框中,单击“下一步”**。
在**“输入应用程序包信息”对话框中,单击“下一步”**。
在**“覆盖现有文件”对话框中,单击“下一步”**。
此时,**“安装进度和摘要”**对话框显示未更新任何数据库,并且仅更新了一个文件。
通过打开浏览器并转到以下 URL 来测试应用程序:
https://localhost/AdventureWorks
Default.aspx 页再次看上去与在 Visual Studio 中运行时一样。 产品表的第一列中的标题**“Product”**说明已成功部署对 Default.aspx 所做的更改。
后续步骤
在此系列演练的第一个演练中,您已将一个文件系统 Web 应用程序项目部署到 IIS Web 应用程序以便在开发计算机上进行测试。 在本演练中,您更改了其中一个数据库的结构、更改了网页并部署了所做的更改。
此系列演练中的下一个演练是演练:使用 Web 部署包部署 Web 应用程序项目(第 3 部分,共 4 部分)。 在该演练中,将创建一个部署包,该包可用于部署到临时环境和生产服务器。