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

作者 :Tom Dykstra

下载初学者项目

本教程系列介绍如何使用 Visual Studio 2012 或 Visual Studio 2010 将 (发布) ASP.NET Web 应用程序部署到Azure 应用服务 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 或命令行中设置生成配置和平台。 发布配置文件包括名为 LastUsedBuildConfigurationLastUsedPlatform的属性,但无法设置这些属性以确定项目的生成方式。 有关详细信息,请参阅 Sayed Hashimi 博客上的 MSBuild:如何设置配置属性

部署到过渡环境

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

  1. 从之前为过渡网站下载的 .publishsettings 文件中复制所需的密码。 密码是 Web Deploy 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 发布管道的示例。 该示例将演示如何部署项目中未包含的文件。