发布时如何覆盖 ASP.NET 部署参数

How to override ASP.NET deployment parameters when publishing

我已经看到了一些问题,阅读了所有的帖子,但我还是做不到。要么我遗漏了什么,要么无法完成..

所以我有一个相当简单的 (ASP.NET MVC) 项目。 在我的项目的根目录中有一个 parameters.xml 文件,其中包含参数定义,例如:

<?xml version="1.0" encoding="utf-8" ?>
<parameters>
  <parameter 
   name="Realm"
   description="Realm for ADFS authentication"
   defaultValue="http://somewebsite">
   <parameterEntry 
      kind="XmlFile"
      scope="Web.config"
      match="/configuration/appSettings/add[@key='ida:Realm']/@value" />
   <parameterEntry 
      kind="XmlFile" 
      scope="Web.config"
      match="/configuration/system.identityModel/identityConfiguration/audienceUris/add/@value" />
<parameterEntry 
      kind="XmlFile" 
      scope="Web.config"
      match="/configuration/system.identityModel.services/federationConfiguration/wsFederation/@realm" />

到目前为止一切顺利。这个结构很好理解,你需要一个部署参数的名称(例如 "Realm"),它的默认值,以及一些可以在 Web.config 文件中找到的 XCLT 选项。

现在,当我创建部署包时,通过 运行 发布,我得到一个包含以下内容的目录:

  1. 为部署自动生成的 cmd 文件
  2. 自述文件
  3. 清单XML文件
  4. 一个 zip 文件,其中包含必须部署到我的服务器的所有文件。
  5. 一个.SetParameters.xml文件

最后一个文件包含我在上面引用的 parameters.xml 文件中设置的参数值,这些值被设置为在那里定义的默认值。
例如如果 Realm 的默认值设置为 http://somewebsite,在生成的部署中 SetParameters.xml,我将得到这条记录:

<setParameter name="Realm" value="http://somewebsite" />

部署包时,这些值将从这个 xml 文件中获取,并根据原始 parameter.xml 文件中定义的 XPath 替换我的 Web.Config 中的值.

现在,我想要的是在构建部署包时覆盖此参数(以及许多其他参数),因为不同的部署配置文件需要不同的值。

关键好像是我的.pubxml文件,是负责发布设置的。我尝试了很多选项,包括 Sayed Hashimi 所说的 here, previous answers given here and here, here too(以及其他人也一样)......对于该死的参数似乎没有什么不同!

我错过了什么吗?有什么神奇的技巧吗?
我是否应该完全忽略参数并仅依赖匹配的 web.config 转换?还有其他建议吗?也许将自定义目标添加到 .csproj 文件? (甚至尝试过...)

谢谢! 阿隆.

WebDeploy 参数化发生在部署时而不是构建时(如配置转换)。我们在工作中对 50 多种产品使用参数化,并取得了巨大成功。对于每个产品,我们有 4 个 SetParameters 文件:

  • SetParameters.DEV.xml
  • SetParameters.QA.xml
  • SetParameters.UAT.xml
  • SetParameters.PROD.xml

每个都有对其环境有效的参数值。我们使用 PowerShell 脚本和 Thoughtworks GO 通过适当的 SetParameters 文件在管道中执行 MSDeploy 包。

请注意,请确保不要将您的 SetParameters 文件与您的应用程序一起部署 - http://dotnetcatch.com/2016/04/02/webdeploy-parameterization-tip-dont-publish-your-parameterization-files/

此外,如果您想在 VS 中预览参数化,这可能会有所帮助 - http://dotnetcatch.com/2014/09/08/parameterizationpreview-visual-studio-extension/