3

在我的Parameters.xml文件中,我有几个参数使用 Web Deploy“变量”语法来引用其他参数,比如引用IIS Web Application Name参数的这个:

<parameter name="MyParam"
           defaultValue="{IIS Web Application Name}/Web.config"
           tags="Hidden"/>

我的问题是,当我构建部署包时,VS 会自动将此参数导入我的SetParameters.xml文件,尽管它被标记为隐藏。当它通过 传递给 msdeploy 时setParamFile,Web Deploy 将参数的值按字面意思解释为

{IIS Web Application Name}/Web.config

而不是替换 IIS 应用程序名称。

如果我从自动生成的SetParameters.xml文件中删除参数,该变量将按预期工作。有什么方法可以防止 VS 首先通过名称或标签包含该参数?

4

2 回答 2

1

考虑到我之前问题的答案,这实际上比我想象的要容易得多。

我只需要在后面的目标中添加一个隐藏标签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>

就是这样!

于 2011-10-31T16:59:35.887 回答
0

这个答案适用于寻找更完整的通过目标替换示例的任何人。此示例显示将变量“数据库服务器名称”替换为连接字符串。

ExcludeFromSetParameter 元素似乎是使替换工作的关键,因为它将参数排除在 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>
于 2017-04-26T17:29:19.543 回答