如何在发布

时间:2016-04-07 15:27:54

标签: asp.net deployment msbuild msdeploy web-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" />

    

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

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

  1. 部署的自动生成的cmd文件
  2. 自述文件
  3. 清单XML文件
  4. 包含必须部署到我的服务器的所有文件的zip文件。
  5. .SetParameters.xml文件
  6. 最后一个文件包含我在上面引用的parameters.xml文件中设置的参数值,这些值被设置为在那里定义的默认值。
    例如如果Realm的默认值设置为http://somewebsite,则在生成的部署SetParameters.xml中,我将获得此记录:

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

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

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

    密钥似乎是我的.pubxml文件,它负责发布设置。我尝试了很多选项,包括Sayed Hashimi所说的here,以前的答案hereherehere too(还有其他人)...似乎没什么区别该死的参数!

    我错过了什么吗?有一些神奇的黑客攻击吗? 我应该完全忽略params并且只依赖于匹配的web.config转换吗?还有其他建议吗?也许在.csproj文件中添加自定义目标? (甚至试过......)

    谢谢! 阿龙。

1 个答案:

答案 0 :(得分: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/