2016-04-07 27 views
0

我已经看到一些问题,阅读所有帖子,但仍无法完成此操作。要么我失去了一些东西,或者它不能这样做。如何在发布时重写ASP.NET部署参数

所以我有一个相当简单的(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文件中设置的参数值,这些值被设置为分别定义有默认的。
例如如果域的默认值设定为http://somewebsite,在生成的部署SetParameters.xml,我会得到这个纪录:

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

当包被部署,这些值将被从这个XML文件取和替换根据原始parameter.xml文件中定义的XPath,我的Web.Config中的值。

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

该键似乎是我的.pubxml文件,它负责发布设置。我尝试了很多选择,包括Sayed Hashimi说的here,以前给出的答案是hereherehere too(以及其他人)......没有任何东西似乎对这些该死的参数产生影响!

我错过了什么吗?有一些魔法破解吗?
我应该完全忽略这些参数,只依赖于匹配的web.config转换吗?任何其他建议?也许将自定义目标添加到.csproj文件? (甚至试过...)

谢谢! Alon。

回答

2

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/

+0

感谢@ chief7!我正在尝试使用现有工具减少工作量并自动化过程。 在我看来,没有办法将一组参数值绑定到发布配置文件(除非我在msdeploy/build之外添加一些手动操作)。 到目前为止唯一的解决方法是:创建一个与发布配置文件名称匹配的web.config转换。这不会在构建期间更改web.config,而只会在生成的部署包中更改。它也更强大,因为我可以根据部署环境对配置进行实际更改(例如,针对不同身份验证模式的不同配置段)。 – alrotem

+1

如果你想通过构建过程进行部署,配置变换是最好的选择。但是请注意,这将需要为每个环境部署构建,这会增加人们检查构建之间的新变化并将未经测试的代码引入上层环境的风险。祝你好运! – chief7

+0

再次感谢@ chief7。 顺便说一句,因为你似乎比我更有经验,假设我想用SetParameters.DEV.xml的内容覆盖部署文件夹(位于deploy cmd文件旁)中的SetParameters.xml文件(所以那些值在部署期间得到应用),你提到一个PowerShell脚本,这是你如何复制/应用/运行的?部署软件包生产时,是否可以通过.pubxml文件以某种方式实现自动化? 我只是觉得奇怪的是,在每个发布配置文件的parameters.xml文件中覆盖“默认值”必须以某种方式手动完成...... – alrotem

相关问题