如何定义一个PropertyGroup,条件是ItemGroup是否包含特定项

时间:2016-02-03 11:13:50

标签: msbuild msbuild-4.0

我试图让Resharper for c ++与我们的内部构建系统一起工作。 Resharper需要静态定义所有包含文件夹(不是任何目标的一部分),但是我们在构建之前运行的目标中设置包含路径。

我们有一个类似于nuget的系统设置,我们通过将它们添加到项目组来声明需要哪些组件。进入该组后,将下载并正确设置组件。我们不想设置包含不使用的组件的路径,因为它会导致编译器保释,因为文件夹不存在。

我需要根据项目是否在ItemGroup中有条件地定义属性。有没有办法在目标之外做到这一点?

目前我正在尝试使用Property功能,但由于某些原因我无法上班。我吠叫错了树吗?这就是我所拥有的:

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <ItemGroup>
        <TheList Include="itemA"/>
        <TheList Include="itemB"/>
        <TheList Include="itemC"/>
    </ItemGroup>

    <PropertyGroup>
        <_TheList>@(TheList)</_TheList>
        <FoundIt>No</FoundIt>
        <FoundIt Condition='$(_TheList.Contains("itemA"))'>Yes</FoundIt>
    </PropertyGroup>

    <Target Name="Test">
        <Message Text="$(_TheList)" Importance="High" />
        <Message Text="It was found: $(FoundIt)" Importance="High" />
    </Target>
</Project>

打印:

itemA;itemB;itemC
It was found: No

将PropertyGroup定义移动到目标中会使其工作,这很奇怪,因为the property function documentation表明它应该在目标之外工作。

0 个答案:

没有答案