msbuild - 使用 msdeploy 和 Visual Studio 2012 构建一次并部署到多个环境

标签 msbuild msdeploy

致力于为多个解决方案集中配置、应用程序设置和连接字符串,同时还切换到从命令行使用 msdeploy 来部署 Web 应用程序。理想情况下,我希望构建一次包,并在将包部署到每个环境时获取最新配置。我需要一些关于最佳方法的建议。

  1. 使用Parameters.xml 和SetParameters.xml 文件动态交换设置和连接字符串。请参阅http://vishaljoshi.blogspot.com/2010/07/web-deploy-parameterization-in-action.html
  2. 使用 machine.config 或服务器级 web.config 文件来存储常用应用设置和连接字符串。
  3. 使用 https://github.com/sayedihashimi/package-web 中的 packageweb NuGet 包它允许将 web.config 转换与 msdeploy 一起使用。
  4. 使用 file 或 configSource 属性以及 SetParameters 来指向不同的配置文件,但必须相对于 Web 根目录。
  5. 使用发布配置文件。看 Deploying an existing package using publish profiles

谢谢

最佳答案

我可以详细说明选项 #1/#3 并比较它们。之前的回复说你必须使用PackageWeb构建多次,这并不准确,你只需要构建一次。

选项 1:Parameters.xml 和 SetParameters.xml

在此方法中,您将在 Web 项目中创建一个parameters.xml 文件,该文件将声明其他 Web 部署参数。

当您构建 Web 部署包时,parameters.xml 中声明的参数将在包中创建。创建此 Web 部署包后,web.config 文件将根据构建配置(和 now potentially a profile specific transform as well )进行转换。

您可以使用该包和 setparameters.xml 来发布指定 Web 部署参数值的包。您可以创建不同的 setparameters.xml 文件,并将其与同一包一起使用以发布到多个目标。要使用此技术进行发布,您可以使用 VS 生成的 deploy.cmd 或使用正确的参数集调用 msdeploy.exe。

选项 3:PackageWeb

PackageWeb 扩展了打包过程,以便当您创建 Web 部署包时,web.config 转换以及可以执行转换的程序集都包含在该包中。

除此之外,当您创建 Web 部署包时,还会生成一个publish-interactive.ps1 文件。您可以使用此文件来发布您的包。它会提示您;要应用的 web.config 转换、Web 部署参数值以及 Web 部署端点信息本身。当您运行发布时,您提供的值将保存到 publish-configuration.ps1.readme 中。您可以删除 .readme,publish-interactive.ps1 将使用该文件中的值来自动发布。您还可以specify the file to be used for settings .

如果您在 VS 创建 Web 部署包时创建了parameters.xml 文件,则会导致 Web 部署参数包含在包中。 PackageWeb 将选取这些内容并提示您输入这些信息。

那么这些方法之间有什么区别?

使用选项 #1,进入包的 web.config 已经被转换。您将没有机会再次转换该文件。使用这两种方法,您都可以指定 Web 部署参数值,以便满足您的需求。如果您要将大块 XML 从一个环境修改到另一个环境,那么 web.config 转换可能会很有用。所以PackageWeb可能是一个更好的选择。

使用选项 #1,您必须手动创建 SetParameters.xml 文件。借助 PackageWeb,您可以使用 WhatIf 选项来运行该过程。系统将提示您输入值,并为您创 build 置文件。

您可以轻松地自动化这两种方法。 PackageWeb 本质上建立在parameters.xml/setparameters.xml 技术之上,并提供了功能的超集。

如果您希望使用最少的移动部件使事情尽可能简单,我会推荐选项 #1,因为如果需要,您可以直接调用 msdeploy.exe。

如果您想简化自动化发布,并且您更喜欢 PowerShell 而不是标准命令提示符,那么请尝试 PackageWeb。

我在 PackageWeb 上有一个 5 分钟的视频 http://sedodream.com/2012/03/14/PackageWebUpdatedAndVideoBelow.aspx 。如果您正在发布网络部署包,我鼓励你们尝试一下。如果它不能满足您的需求,请告诉我,因为我们稍后可能会以更正式的方式使用我们在 PackageWeb 中学到的知识。

关于msbuild - 使用 msdeploy 和 Visual Studio 2012 构建一次并部署到多个环境,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13170493/

相关文章:

visual-studio - `$(Platform)` 宏在文件引用中的计算结果始终为 `AnyCPU`

iis - msdeploy 为手动部署创建包

c# - 8.10 azure 部署错误 : ts-loader: Using typescript@1.

iis-7.5 - 如何让 Deploy.cmd 填写来自 Parameters.xml 的替换字段

.net - “dotnet Restore”与 TeamCity 中的 'nuget restore'

.net - 在发布和 checkin Team Foundation Server (TFS) 期间增加版本

deployment - 使用Web Deploy的appHostConfig在IIS 6中创建网站

visual-studio - 如何避免在服务器上部署 *.<Environment>.config 转换

msbuild - CruiseControl.NET 与 Web 部署项目

reporting-services - 用于将SSRS项目报告RDL模式从2016转换为2008版本的构建工具