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

发布时如何覆盖ASP.NET部署参数,asp.net,deployment,msbuild,msdeploy,web-publishing,Asp.net,Deployment,Msbuild,Msdeploy,Web Publishing,我看到了一些问题,阅读了所有的帖子,但我仍然无法完成。要么我错过了什么,要么就是做不到 所以我有一个相当简单的(ASP.NETMVC)项目。 在我的项目的根目录中有一个parameters.xml文件,其中包含参数定义,例如: <?xml version="1.0" encoding="utf-8" ?> <parameters> <parameter name="Realm" description="Realm for ADFS authent

我看到了一些问题,阅读了所有的帖子,但我仍然无法完成。要么我错过了什么,要么就是做不到

所以我有一个相当简单的(ASP.NETMVC)项目。 在我的项目的根目录中有一个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选项

现在,当我创建部署包时,通过运行Publish,我得到一个目录,其中包含:

  • 为部署自动生成的cmd文件
  • 自述文件
  • 清单XML文件
  • 包含必须部署到我的服务器的所有文件的zip文件
  • 一个.SetParameters.xml文件
  • 最后一个文件包含在我上面引用的parameters.xml文件中设置的参数值,这些值被设置为在那里定义的默认值。
    e、 g.如果Realm的默认值设置为,则在生成的部署SetParameters.xml中,我将获得以下记录:

    <setParameter name="Realm" value="http://somewebsite" />
    
    
    
    部署包时,将从此xml文件中获取这些值,并根据原始parameter.xml文件中定义的XPath替换my Web.Config中的值

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

    密钥似乎是my.pubxml文件,它负责发布设置。我尝试了很多选择,包括Sayed Hashimi所说的话、之前给出的答案和(以及其他)。。。似乎没有什么能改变这些该死的参数

    我错过什么了吗?有什么魔法破解吗?
    我是否应该完全忽略参数,只依赖匹配的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文件-


    另外,如果您想在VS中预览您的参数化,这可能会有所帮助-

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

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

    注意,请确保不要在应用程序中部署SetParameters文件-


    此外,如果您想在VS中预览您的参数化,这可能会有所帮助-

    谢谢@chief7!我正在尝试使用现有的工具来减少工作量和自动化流程。在我看来,似乎没有办法将一组param值绑定到发布配置文件(除非我在msdeploy/build之外添加一些手工劳动)。目前唯一的解决方法是:创建与发布配置文件名称匹配的web.config转换。这在生成期间不会更改web.config,但仅在生成的部署包中更改。它也更强大,因为我可以根据部署环境对配置进行实际更改(例如,不同身份验证模式的不同配置部分)。如果您希望通过构建过程进行部署,配置转换是最佳选择。但是请注意,这将要求您为每个环境部署构建,这会增加有人在构建之间签入新更改并将未测试的代码引入上层环境的风险。祝你好运再次感谢,@chief7。顺便说一句,由于您在这方面似乎比我更有经验,假设我想用SetParameters.DEV.xml的内容覆盖部署文件夹(部署cmd文件旁边)中的SetParameters.xml文件(以便在部署期间应用这些值),您提到了PowerShell脚本,您是这样复制/应用/运行它的吗?在生成部署包时,它是否可以从.pubxml文件自动执行?我只是觉得很奇怪,在每个发布配置文件中覆盖parameters.xml文件中的“默认值”必须以某种方式手动完成…我查看了一下,但找不到在使用发布配置文件时覆盖SetParameters文件的方法。发布配置文件只是MSBuild的扩展。在MSBuild进程之外,我们使用PowerShell脚本调用MSDeploy.exe并部署一个带有自定义SetParameters[env].xml的包。我让它正常工作了。我的XPathThank@chief7中缺少/@值!我正在尝试使用现有的工具来减少工作量和自动化流程。在我看来,似乎没有办法将一组param值绑定到发布配置文件(除非我在msdeploy/build之外添加一些手工劳动)。目前唯一的解决方法是:创建与发布配置文件名称匹配的web.config转换。这在生成期间不会更改web.config,但仅在生成的部署包中更改。它也更强大,因为我可以根据部署环境对配置进行实际更改