在我的 Parameters.xml 文件中,我有几个参数使用Web Deploy“variable”语法来引用其他参数,例如引用IIS Web Application Name
的参数参数:
<parameter name="MyParam"
defaultValue="{IIS Web Application Name}/Web.config"
tags="Hidden"/>
我的问题是,当我构建部署包时,VS会自动将此参数导入我的 SetParameters.xml 文件,尽管它被标记为隐藏。当它通过setParamFile
传递给msdeploy时,Web Deploy会将参数的值解释为
{IIS Web Application Name}/Web.config
而不是替换IIS应用程序名称。
如果我从自动生成的 SetParameters.xml 文件中删除参数,则该变量将按预期工作。有没有办法阻止VS首先包含该参数,无论是名称还是标签?
答案 0 :(得分:1)
考虑到my earlier question的答案,这实际上比我想象的容易得多。
我只需要在AddIisAndContentDeclareParametersItems
后面的目标中添加隐藏标记。这显然是在构建包之前在源清单中设置标记。最终看起来像这样:
<Target Name="DeclareCustomParameters"
AfterTargets="AddIisAndContentDeclareParametersItems">
<ItemGroup>
<MsDeployDeclareParameters Include="Foo">
<!-- <snip> -->
<!-- the following elements are the important ones: -->
<Tags>Hidden</Tags>
<ExcludeFromSetParameter>True</ExcludeFromSetParameter>
</MsDeployDeclareParameters>
</ItemGroup>
</Target>
就是这样!
答案 1 :(得分:0)
这个答案适用于寻找更完整的目标替代示例的人。此示例显示将变量“数据库服务器名称”替换为连接字符串。
ExcludeFromSetParameter元素似乎是使替换工作的关键,因为它将param保留在SetParameters.xml文件之外(正如OP提到的那样,他手动完成)。不幸的是,我不认为ExcludeFromSetParameter可以从parameters.xml文件中设置,所以这是唯一的选择......
<Target Name="DeclareCustomParameters" BeforeTargets="Package">
<ItemGroup>
<MsDeployDeclareParameters Include="DatabaseServer">
<Description>Location of the database server hosting the user database</Description>
<Value>localhost</Value>
<DefaultValue>localhost</DefaultValue>
<Tags>DBServer, SQL</Tags>
</MsDeployDeclareParameters>
<MsDeployDeclareParameters Include="DB Connection String">
<Kind>XmlFile</Kind>
<Scope>Web.config</Scope>
<Match>/configuration/connectionStrings/add[@name='Database']/@connectionString</Match>
<Description>The connection string to the Database</Description>
<DefaultValue>Data Source={DatabaseServer};Initial Catalog=MyDatabase;Integrated Security=true;MultipleActiveResultSets=true;</DefaultValue>
<Tags>Hidden</Tags>
<ExcludeFromSetParameter>True</ExcludeFromSetParameter>
</MsDeployDeclareParameters>
</ItemGroup>
</Target>