测试MSBuild属性是否包含子字符串

时间:2014-07-21 04:27:00

标签: msbuild

我在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属性中使用了一些伪逻辑来表明我的意思。我使用的是.NET框架版本2.0.50727.3655;和MSBuild版本3.4.30729.1。

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

1 个答案:

答案 0 :(得分:0)

好吧,既然你不能使用属性功能,那么你必须要有创意。

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