目前我正在尝试创建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
提前谢谢!
最好的问候,rdvanbuuren
答案 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>
替换最后一行,然后再试一次