【问题标题】:Test if an MSBuild property constains a substring测试 MSBuild 属性是否包含子字符串
【发布时间】:2014-09-11 12:36:49
【问题描述】:

我在 MSBuild 项目中有一个属性,它是一个以分号分隔的字符串值列表。如何测试列表是否包含特定值?

在下面的示例清单中,我希望目标 DeployToServer 仅在属性 $(DCC_Define) 包含 'WebDeploy' 时执行。

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

  <PropertyGroup>
    <DCC_Define>WebDeploy;DEBUG</DCC_Define>
  </PropertyGroup>

   <Target Name="DeployToServer" Condition="$(DCC_Define) constains 'WebDeploy'">
        <Message Text="Do something." />
    </Target>

</Project>

我在@Condition 属性中使用了一些伪逻辑来表明我的意思。我正在使用 2.0.50727.3655 的 .NET 框架版本;和 3.4.30729.1 的 MSBuild 版本。

我怎样才能做到这一点?我没有能力升级到 MSBuild 4。

【问题讨论】:

    标签: msbuild


    【解决方案1】:

    好吧,既然你不能使用属性函数,你必须要有创意。

    <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
        <PropertyGroup>
            <DCC_Define>WebDeploy;DEBUG;WebDeploy</DCC_Define>
        </PropertyGroup>
    
        <Target Name="DeployToServer">
            <CreateItem Include="$(DCC_Define)">
                <Output TaskParameter="Include" ItemName="DCC_Define" />
            </CreateItem>
            <!-- Not required since MSBuild doesn't execute targets twice -->
            <!-- <CreateProperty Value="True" Condition="%(DCC_Define.Identity) == WebDeploy">
                <Output TaskParameter="Value" PropertyName="WebDeploy" />
            </CreateProperty> -->
            <CallTarget Targets="_DeployToServer" Condition="%(DCC_Define.Identity) == WebDeploy" />
        </Target>
    
        <Target Name="_DeployToServer">
            <Message Text="Do something." />
        </Target>
    </Project>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-29
      • 1970-01-01
      • 2017-04-27
      • 2011-02-11
      • 2021-11-10
      • 1970-01-01
      相关资源
      最近更新 更多