在c#msbuild任务中检索同名的多个项元数据

在c#msbuild任务中检索同名的多个项元数据,c#,msbuild,msbuild-task,C#,Msbuild,Msbuild Task,如何在c#msbuild任务中获取具有相同名称的多个项元数据,例如,如果我有: <ItemGroup> <Assemblies Include = "S:\SVN\SomeDirectory\src\"> <excludeAssembly>AssemblyName_1</excludeAssembly> <excludeAssembly>AssemblyName_2</excludeAssemb

如何在c#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>

获取单个元数据值。我需要获得
值列表元数据与项不同,一个项可以有不同的元数据,但一个元数据只能有一个值

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

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

<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);

排除故障
//近似语法,我不知道你想做什么
var itemData=itemTask.GetMetadata(“excludeAssembly”);
BuildItemGroup ExcludeAssemblys=project.GetEvaluatedItemsByName(itemData);
<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);