使用 Visual Studio ASP.NET Web 部署:命令行部署

作者:Tom Dykstra

下载初学者项目

本教程系列介绍如何使用 Visual Studio 2012 或 Visual Studio 2010 将 ASP.NET Web 应用程序部署到Azure App 服务 Web 应用或第三方托管提供程序。 有关该系列的信息,请参阅 该系列中的第一个教程。

概述

本教程演示如何从命令行调用 Visual Studio Web 发布管道。 这对于想要 自动执行部署过程 (而不是在 Visual Studio 中手动执行)的方案非常有用,通常使用 源代码版本控制系统

进行更改以部署

当前,“关于”页显示模板代码。

关于包含模板代码的页面

你将将其替换为显示学生注册摘要的代码。

打开About.aspx页,删除元素中的所有MainContentContent标记,并在其位置插入以下标记:

<h2>Student Body Statistics</h2>
    <asp:ObjectDataSource ID="StudentStatisticsObjectDataSource" runat="server" TypeName="ContosoUniversity.BLL.SchoolBL"
        SelectMethod="GetStudentStatistics" DataObjectTypeName="ContosoUniversity.DAL.EnrollmentDateGroup">
    </asp:ObjectDataSource>
    <asp:GridView ID="StudentStatisticsGridView" runat="server" AutoGenerateColumns="False"
        DataSourceID="StudentStatisticsObjectDataSource">
        <Columns>
            <asp:BoundField DataField="EnrollmentDate" DataFormatString="{0:d}" HeaderText="Date of Enrollment"
                ReadOnly="True" SortExpression="EnrollmentDate" />
            <asp:BoundField DataField="StudentCount" HeaderText="Students" ReadOnly="True"
                SortExpression="StudentCount" />
        </Columns>
    </asp:GridView>

运行项目并选择“ 关于 ”页。

“关于”页面

使用命令行部署到测试

不会部署另一个数据库更改,因此请为 aspnet-ContosoUniversity 数据库禁用 dbDacFx 数据库部署。 打开发布 Web 向导,在三个发布配置文件中,清除“设置”选项卡上的“更新数据库复选框。

在 Windows 8“开始”页中,搜索 VS2012 的开发人员命令提示符。

右键单击 VS2012 开发人员命令提示符的图标,然后单击“以管理员身份运行”。

在命令提示符处输入以下命令,将解决方案文件的路径替换为解决方案文件的路径:

msbuild C:\ContosoUniversity\ContosoUniversity.sln /p:DeployOnBuild=true /p:PublishProfile=Test

MSBuild 生成解决方案并将其部署到测试环境。

命令行输出

打开浏览器并转到 http://localhost/ContosoUniversity,然后单击“ 关于 ”页以验证部署是否成功。

如果你尚未在测试中创建任何学生,你将在学生正文统计信息标题下看到一个空页面。 转到 “学生 ”页,单击“ 添加学生”,然后添加一些学生,然后返回到“ 关于 ”页以查看学生统计信息。

显示“关于”页上的“学生正文统计信息”的屏幕截图。

键命令行选项

输入的命令将解决方案文件路径和两个属性传递给 MSBuild:

msbuild C:\ContosoUniversity\ContosoUniversity.sln /p:DeployOnBuild=true 
/p:PublishProfile=Test

部署解决方案与部署单个项目

指定解决方案文件会导致生成解决方案中的所有项目。 如果解决方案中有多个 Web 项目,则应用以下 MSBuild 行为:

  • 在命令行上指定的属性将传递给每个项目。 因此,每个 Web 项目都必须具有一个具有指定名称的发布配置文件。 如果指定 /p:PublishProfile=Test,每个 Web 项目必须具有名为 Test 的发布配置文件。
  • 当另一个项目甚至无法生成时,可能会成功发布一个项目。 有关详细信息,请参阅 stackoverflow 线程 MSBuild 失败并包含两个包

如果指定单个项目而不是解决方案,则必须添加一个指定 Visual Studio 版本的参数。 如果使用 Visual Studio 2012,命令行将类似于以下示例:

msbuild C:\ContosoUniversity\ContosoUniversity\ContosoUniversity.csproj /p:DeployOnBuild=true /p:PublishProfile=Test /p:VisualStudioVersion=11.0

Visual Studio 2010 的版本号为 10.0。 有关详细信息,请参阅 Sayed Hashimi 博客上的 Visual Studio 项目兼容性和 VisualStudioVersion

指定发布配置文件

可以按名称或 .pubxml 文件的完整路径指定发布配置文件,如以下示例所示:

msbuild C:\ContosoUniversity\ContosoUniversity.sln /p:DeployOnBuild=true /p:PublishProfile=C:\ContosoUniversity\ContosoUniversity\Properties\PublishProfiles\Test.pubxml

命令行发布支持的 Web 发布方法

命令行发布支持三种发布方法:

  • MSDeploy - 使用 Web 部署进行发布。
  • Package - 通过创建 Web 部署包进行发布。 必须独立于创建包的 MSBuild 命令安装该包。
  • FileSystem - 通过将文件复制到指定文件夹进行发布。

指定生成配置和平台

必须在 Visual Studio 或命令行中设置生成配置和平台。 发布配置文件包括命名 LastUsedBuildConfiguration 属性, LastUsedPlatform但无法设置这些属性以确定项目的生成方式。 有关详细信息,请参阅 MSBuild:如何在 Sayed Hashimi 的博客上设置配置属性

部署到过渡环境

若要部署到 Azure,必须将密码添加到命令行。 如果在 Visual Studio 的发布配置文件中保存了密码,则密码以加密形式 存储在 .pubxml.user 文件中。 执行命令行部署时,MSBuild 不会访问该文件,因此必须在命令行参数中传入密码。

  1. 从之前为过渡网站下载的 .publishsettings 文件复制所需的密码。 密码是 Web 部署publishProfile元素的属性的值userPWD

    Web 部署密码

  2. 在 Windows 8“开始”页中,搜索 VS2012 开发人员命令提示符,然后单击图标以打开命令提示符。 (这一次不必以管理员身份打开它,因为你未在本地计算机上部署到 IIS。

  3. 在命令提示符处输入以下命令,将解决方案文件的路径替换为解决方案文件的路径,并将密码替换为密码:

    msbuild C:\ContosoUniversity\ContosoUniversity.sln /p:DeployOnBuild=true /p:PublishProfile=Staging /p:Password=hdNSWsbuqno7J5uqnwKafwlfNPt1DSco7J5uqnwKafwlfNPt1DSpKHuYgCco7J5 /p:AllowUntrustedCertificate=true
    

    请注意,此命令行包含一个额外的参数: /p:AllowUntrustedCertificate=true。 在编写本教程时, AllowUntrustedCertificate 必须在从命令行发布到 Azure 时设置该属性。 释放此 bug 的修补程序时,不需要该参数。

  4. 打开浏览器并转到过渡站点的 URL,然后单击“ 关于 ”页以验证部署是否成功。

    如之前在测试环境中看到的那样,可能需要创建一些学生才能在 “关于” 页面上查看统计信息。

部署到生产

部署到生产的过程类似于过渡的过程。

  1. 从之前为生产网站下载的 .publishsettings 文件复制所需的密码。

  2. 打开 VS2012 的开发人员命令提示符。

  3. 在命令提示符处输入以下命令,将解决方案文件的路径替换为解决方案文件的路径,并将密码替换为密码:

    msbuild C:\ContosoUniversity\ContosoUniversity.sln /p:DeployOnBuild=true /p:PublishProfile=Production /p:Password=hdNSWsbuqnwKafwlo7J5uqnwKafwlfNPt1DSqnwKafwlfNPt1DSpKHuYgCco7J5 /p:AllowUntrustedCertificate=true
    

    对于实际生产站点,如果还发生数据库更改,通常会在部署前将 app_offline.htm 文件复制到站点,并在成功部署后将其删除。

  4. 打开浏览器并转到过渡站点的 URL,然后单击“ 关于 ”页以验证部署是否成功。

总结

现已使用命令行部署应用程序更新。

显示“关于”页面的屏幕截图,其中显示了学生正文统计信息。

在下一教程中,你将看到有关如何扩展 Web 发布管道的示例。 此示例将演示如何部署项目中未包含的文件。