部署时的 web.config 转换未构建

Posted

技术标签:

【中文标题】部署时的 web.config 转换未构建【英文标题】:web.config transform at deploy time not build 【发布时间】:2013-04-27 12:59:03 【问题描述】:

我想知道如何执行以下操作

构建一个 ASP.NET 网站并将其打包到文件系统中 能够将网站部署到一个或多个环境。我希望配置文件的转换发生在部署点,而不是在构建点。这样,我的代码不会为每个部署重新编译,并且不存在引入新更改的风险。

根据我自己的阅读,我不确定如何做到这一点。 WebDeploy 似乎基于配置打包、转换和部署,但我不确定如何将这些步骤解耦以避免需要从源代码控制重新编译代码。

有人有解决这个问题的经验吗?

【问题讨论】:

你见过 PackageWeb NuGet 包吗? sedodream.com/2011/12/24/PackageOncePublishAnywhere.aspxnuget.org/packages/PackageWeb OctopusDeploy 最终成为我试图解决的问题的全局解决方案。 【参考方案1】:

您可以使用 Web 部署(又名 MSDeploy)的参数化功能。您将需要使用 parameters.xml 文件和 setParameters.xml 文件来动态换出设置,因为您没有在构建时转换您的包。

在部署时,您可以传入任何 .xml 文件来设置您在 parameters.xml 文件中指定的参数。由于 parameters.xml 位于您的项目解决方案的根目录(例如,请参阅文件放置位置的示例链接),因此在构建时它会被烘焙到您的 Web 包中。但是,您现在可以通过在部署期间从命令行传入 setParms .xml 文件来灵活地更改这些值。这与在构建期间根据配置设置转换值不同。

这是一个 msdeploy 命令行示例,用于为暂存环境传入 ParamFile。

msdeploy -verb:sync -source:package="c:\packages\mypackage.zip" -dest:auto,computername=StagingServer1 -setParamFile="c:\StagingParameters.xml"

有关示例和 MSDN 技术信息,请参阅以下链接:

Web Deploy Parameterization in Action

Parameterization vs. Web.Config Transformation

Web Deploy Operation Settings

Similar question on *** that provides several methods

【讨论】:

感谢@SoftwareCarpenter,参数化功能具有真正的潜力。你知道是否可以输出多个 setParameters.xml 文件吗?即:每个环境一个。在这个阶段,我想念如何为每个环境发布一组参数,以便以后可以在部署时选择一个。 当然,这就是这种方法的美妙之处。您可以使用 setParamFile 命令行参数传入任何 .xml 文件,其中包含您在部署时所针对的环境的值。请参阅更新的答案以进行澄清,并检查链接“Web Deploy Parameterization in action”。希望这会有所帮助。 如果您还需要更多解释,请查看此链接:asp.net/web-forms/tutorials/deployment/… Windows 服务中的 app.config 文件是否存在类似内容? 查看 SlowCheetah - XML 转换 Visual Studio 扩展。此包使您能够根据构建配置转换您的 app.config 或任何其他 XML 文件。它还添加了额外的工具来帮助您创建 XML 转换。作者:Sayed Ibrahim Hashimi、Chuck England 和 Bill Hiebert visualstudiogallery.msdn.microsoft.com/…

以上是关于部署时的 web.config 转换未构建的主要内容,如果未能解决你的问题,请参考以下文章

在 .net 核心中,它具有用于 Web 应用程序项目部署的 Web.config 转换语法?

使用 web.config 转换时的可替换令牌_?

使用 TFS Build Server 2015 转换 web.config

Web.config 转换:未声明转换属性

WCF Web 服务未部署在 localhost ... web.config ... 端点上

用于调试的 VS 2010 Web.config 转换