项目元数据不覆盖属性元数据

时间:2013-04-11 06:52:42

标签: msbuild

如何获取项目的元数据以覆盖项目定义元数据?

我的vcxproj中包含:

<ItemGroup>
  <PNL Include="some file">
    <OutputDirectory>y</OutputDirectory>
  </PNL>
</ItemGroup>

然后我有一个.props文件:

<PNL>
  <OutputDirectory>x</OutputDirectory>
  <CommandLineTemplate>%(OutputDirectory)</CommandLineTemplate>
</PNL>

和.target文件:

<PNL>
  OutputDirectory="%(PNL.OutputDirectory)"
  Outputs="%(PNL.Outputs)"
  CommandLineTemplate="%(PNL.CommandLineTemplate)"
</PNL>

所以我希望Items元数据覆盖.props文件中的元数据 命令行等于:y 但是visual studio给了我:x

3 个答案:

答案 0 :(得分:0)

项目元数据是针对每个特定项目的内容,而不是针对整个项目数组。您可以将其视为为项目数组中的每个特定分配的单独字典

因此,在您首先在.prop文件中进行示例,您尝试将特定字典分配给“空”项目数组,然后在vcxproj文件中,您只是使用自己的元数据定义新项目,并使用它。

您无法为所有“未来”项目定义“默认”元数据。

您可以在.prop文件中创建单独的目标,该目标将为每个已定义的项添加元数据,并在您需要时调用它。

答案 1 :(得分:0)

根据: http://msdn.microsoft.com/en-us/library/ms171453.aspx#BKMK_Transforming

在“项目定义”下:

  

从.NET Framework 3.5开始,您可以使用ItemDefinitionGroup元素将默认元数据添加到任何项类型。与众所周知的元数据一样,默认元数据与您指定的项类型的所有项相关联。您可以显式覆盖项目定义中的默认元数据。

我正在做的是不是吗?

答案 2 :(得分:0)

我已经解决了这个问题。而不是将CommandLineTemplate放在.props文件中,并使.target文件引用%(PNL.CommandLineTemplate)

我只是将命令放在目标文件中: CommandLineTemplate = “%(PNL.OutputDirectory)”