MsDeploy parameters.xml:如何引用参数?

时间:2014-04-18 08:51:53

标签: parameters package msdeploy webdeploy

目前我正在尝试创建Web部署包。所以我在我的项目的根目录中添加了一个parameters.xml,并指定了一些自定义参数。 我发现我的很多参数都是一样的。所以我想做一些参数引用。寻找这个,我来到了accros Reference for the Web Application Package。在那里它说:

  

隐藏 - 作为安装UI的一部分,不向用户显示隐藏参数。隐藏参数必须设置defaultValue。这些参数用于设置硬编码的默认值或设置计算的默认值。在建立参数以供将来使用时,有时会使用硬编码默认值。计算值用于从其他参数构造参数的值。构造计算值时,可以通过将{} s包围的其他参数名称放在您想要值的位置来引用其他参数。有关此标记的常见用法,请参阅示例中的“连接字符串”参数。

因此,根据文档,可以通过在“vdeDashboardAddress”上设置属性defaultValue =“https:// {vdeHostname} /”和tags =“Hidden”,从“vdeDashboardAddress”引用参数“vdeHostName”。

这使我得到了以下的parameters.xml代码:

<parameters>
  <parameter name="vdeHostname" description="Please provide the hostname" defaultValue="www.test.com">
    <description culture="en">The hostname of the website.</description>
    <parameterEntry kind="XmlFile"
                    scope="obj\\Release\\Package\\PackageTmp\\Configuration\\hosts\.config$"
                    match="/hostConfigurationSection/hostConfigurations/add[@name='Default']/@host" />
  </parameter>
  <parameter name="vdeDashboardAddress" defaultValue="https://{vdeHostname}/" tags="Hidden">
    <description culture="en">The https address of the Dashboard.</description>
    <parameterEntry kind="XmlFile"
                    scope="obj\\Release\\Package\\PackageTmp\\Configuration\\identity\.config$"
                    match="/system.identityModel/identityConfiguration[@name='Default']/audienceUris/add/@value" />
  </parameter>
<parameters>

然而,情况似乎并非如此。它不引用/替换defaultValue中属性的各个部分。 目前正在输出:

<audienceUris>
  <add value="https://{vdeHostname}/" />
</audienceUris>

我在这里找到的唯一提及我的问题的主题是How to get Deploy.cmd to fill in replacement fields from Parameters.xml

  1. 有谁知道我在这里做错了什么?
  2. 规格不正确吗?然后,如何在parameters.xml中部分替换?
  3. 提前谢谢!

    最好的问候,rdvanbuuren

3 个答案:

答案 0 :(得分:0)

我不确定,但scope属性对我来说很可疑。我在我面前的(工作)参数文件中的所有范围元素都是scope="\\Path\\To\\File\.extension$"形式,其中假定指定的路径从部署应用程序的根文件夹开始。 (例如,最常见的是scope="\\Web\.config$"。)我的工作文件中的任何范围属性都不包含路径的Package \ PackageTmp部分,即使该路径存在于WebDeploy使用的zip文件中。

答案 1 :(得分:0)

根据我的经验,如果通过parameters.xml文件替换,则无法完成那种排序。就我而言,我必须使用publish profile(或.wpp.targets文件)。

此方法将您尝试加入的参数排除在setparameters.xml文件中,这似乎是在使用.Deploy.cmd导入时使替换工作的关键。

因此,您应该能够按照上述链接的说明创建目标文件。然后,您将需要文件中的以下内容(基于您的原始示例):

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

    <Target Name="DeclareCustomParameters" BeforeTargets="Package">
        <ItemGroup>

            <MsDeployDeclareParameters Include="vdeHostname">
                <Kind>XmlFile</Kind>
                <Scope>Web.config</Scope>
                <Match>/hostConfigurationSection/hostConfigurations/add[@name='Default']/@host</Match>
                <Description>The hostname of the website.</Description>
                <Value>www.test.com</Value>
                <DefaultValue>www.test.com</DefaultValue>
            </MsDeployDeclareParameters>

            <MsDeployDeclareParameters Include="vdeDashboardAddress">
                <Kind>XmlFile</Kind>
                <Scope>Web.config</Scope>
                <Match>/system.identityModel/identityConfiguration[@name='Default']/audienceUris/add/@value</Match>
                <Description>The https address of the Dashboard.</Description>
                <DefaultValue>https://{vdeHostname}/</DefaultValue>
                <Tags>Hidden</Tags>
                <ExcludeFromSetParameter>True</ExcludeFromSetParameter>
            </MsDeployDeclareParameters>

        </ItemGroup>
    </Target>

</Project>

这里的魔力可以通过ExcludeFromSetParameters元素实现,它将vdeDashboardAddress保留在.SetParameters.xml文件之外,从而允许替换工作。显然,您希望从parameters.xml中删除相应的内容

但有一点需要注意:验证范围是否正确(根据另一个答案)。我提供的这个例子假设这些东西存在于web.config

答案 2 :(得分:0)

我在parameters.xml中看到一个可能的问题:您的xml根<parameters>标记未关闭。所以我建议用</parameters>替换最后一行,然后再试一次