MSBuild可以从生成的SetParameters.xml中排除“隐藏”Web部署参数吗?

时间:2011-09-29 14:50:49

标签: visual-studio-2010 msbuild msdeploy webdeploy

在我的 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首先包含该参数,无论是名称还是标签?

2 个答案:

答案 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>