Msbuild 如何定义PropertyGroup,条件是ItemGroup是否包含特定项 我试图让ReHARPER C++用于我们的内部构建系统。 Resharper需要静态定义所有包含文件夹(不是任何目标的一部分),但我们在构建之前运行的目标中设置包含路径

Msbuild 如何定义PropertyGroup,条件是ItemGroup是否包含特定项 我试图让ReHARPER C++用于我们的内部构建系统。 Resharper需要静态定义所有包含文件夹(不是任何目标的一部分),但我们在构建之前运行的目标中设置包含路径,msbuild,msbuild-4.0,Msbuild,Msbuild 4.0,我们建立了一个类似nuget的系统,通过将组件添加到itemgroup来声明需要哪些组件。进入该组后,将下载并正确设置组件。我们不想设置未使用组件的include路径,因为这会导致编译器退出,因为文件夹不存在 我需要根据项目是否在ItemGroup中有条件地定义属性。有没有办法在目标之外做到这一点 目前我正在尝试使用属性函数,但由于某些原因,我无法开始工作。我找错树了吗?这就是我所拥有的: <?xml version="1.0" encoding="utf-8"?> <Proj

我们建立了一个类似nuget的系统,通过将组件添加到itemgroup来声明需要哪些组件。进入该组后,将下载并正确设置组件。我们不想设置未使用组件的include路径,因为这会导致编译器退出,因为文件夹不存在

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

目前我正在尝试使用属性函数,但由于某些原因,我无法开始工作。我找错树了吗?这就是我所拥有的:

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

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

显然,在生成之前不支持将ItemGroup转换为PropertyGroup。“目标元素之外的项在生成的评估阶段被赋值。”。条件的计算结果为false,因为它查看的是字面上的
@(列表)
,而不是
项a;项目b;itemC
。尽管您可能希望打开一个bug报告,以引起一些注意,并验证这绝对是静态不可能的。还有一些项函数,如
@(TheList->Contains('itemC'))
,但如果您试图在目标之外的条件下使用它们,则会出现错误。谢谢!这正是答案。如果我更改代码以查找“the”,它将返回true。你应该写下来作为这个问题的答案。
itemA;itemB;itemC
It was found: No