Msbuild 如何基于标签属性引用ItemGroup中的项目?

Msbuild 如何基于标签属性引用ItemGroup中的项目?,msbuild,label,itemgroup,Msbuild,Label,Itemgroup,在我的cpp项目文件中,我定义了一个项目组: <ItemGroup> <None Include="file1.dll" Label="Release Version"/> <None Include="file2.dll" Label="Debug Version"/> </ItemGroup> 我有一个后构建目标,希望根据项目的标签属性将上述文件复制到不同的位置。例如: <Target Name="AfterBuild"> &

在我的cpp项目文件中,我定义了一个项目组:

<ItemGroup>
<None Include="file1.dll" Label="Release Version"/>
<None Include="file2.dll" Label="Debug Version"/>
</ItemGroup>

我有一个后构建目标,希望根据项目的标签属性将上述文件复制到不同的位置。例如:

<Target Name="AfterBuild">
<Copy SourceFiles="@(None)" DestinationFiles="$(ReleaseLocation)" Condition="'%(None.Label)'=='Release Version'" ContinueOnError="false" />
</Target>


但是,这不起作用(没有复制任何内容)。如何在“复制”命令中引用标签属性?

不能基于标签属性筛选项目,但可以基于项目的元数据进行筛选。例如:

<ItemGroup>
  <None Include="file1.dll">
   <Label>Release Version</Label>
  </None>
  <None Include="file2.dll">
    <Label>Debug Version</Label>
  </None>
</ItemGroup>

<Target Name="AfterBuild">
  <ItemGroup>
    <_RetailContent Include="@(None)" Condition="%(Label) == 'Release Version'" />
  </ItemGroup>
  <Copy SourceFiles="@(_RetailContent)" DestinationFolder="$(ReleaseLocation)" ContinueOnError="false" />
</Target>

发行版本
调试版本

None代表什么?@jayarjo,“None”是问题作者使用的项目组。此组或此处的组名没有什么特别之处,它可能是“MyFavoriteItemGroup”或任何其他名称。这意味着Label属性应可用于“筛选”项目:“标签属性在某些生成系统中用作控制生成行为的方法。您只能在声明中使用它,作为创建更易于理解的MSBuild脚本的方法,或作为影响生成操作的控件设置。”