1

如何在 ac# msbuild 任务中获取具有相同名称的多个项目元数据,例如,如果我有:

 <ItemGroup>    
   <Assemblies Include = "S:\SVN\SomeDirectory\src\">
     <excludeAssembly>AssemblyName_1</excludeAssembly>
     <excludeAssembly>AssemblyName_2</excludeAssembly>
     <excludeAssembly>AssemblyName_3</excludeAssembly>
     <excludeAssembly>AssemblyName_4</excludeAssembly>
   </Assemblies>
 </ItemGroup>

<excludeAssembly>如果通常使用以下方法,我将如何获得所有元数据的列表:

var itemData = itemTask.GetMetadata("excludeAssembly")

获取单个元数据值。我需要获取<excludeAssembly>值列表

4

1 回答 1

2

元数据与项目不同,一个项目可以有不同的元数据,但元数据只有一个值。

在 Microsoft.Build.Engine 程序集 ( BuildItem.EvaluateAllItemMetadata(...) ) 上使用反射器,您会看到项目的元数据存储在字典中,因此对于给定的元数据名称,您只能有一个值。

在您的情况下,一种解决方法是使用元数据作为项目的名称,如下所示:

<ItemGroup>    
  <Assemblies Include = "S:\SVN\SomeDirectory\src\">
    <excludeAssembly>exludeAssemblySet</excludeAssembly>
  </Assemblies>
</ItemGroup>

<ItemGroup>
  <exludeAssemblySet Include="AssemblyName_1"/>
  <exludeAssemblySet Include="AssemblyName_2"/>
  <exludeAssemblySet Include="AssemblyName_3"/>
  <exludeAssemblySet Include="AssemblyName_4"/>
</ItemGroup>

// Approximative syntax, I don't know what you want to do
var itemData = itemTask.GetMetadata("excludeAssembly");
BuildItemGroup excludeAssemblies = project.GetEvaluatedItemsByName(itemData);
于 2009-03-26T13:46:08.070 回答