Получение метаданных из нескольких элементов с одним и тем же именем в задаче c # msbuild - PullRequest
1 голос
/ 26 марта 2009

Как получить метаданные из нескольких элементов с одним и тем же именем в задаче 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>

Как мне получить список всех <excludeAssembly> метаданных, если обычно используется:

var itemData = itemTask.GetMetadata("excludeAssembly")

для получения отдельных значений метаданных. Мне нужно получить список <excludeAssembly> значений

1 Ответ

2 голосов
/ 26 марта 2009

Метаданные отличаются от элемента, вы можете иметь разные метаданные для одного элемента, но только одно значение для метаданных.

Используя Reflector в сборке 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);
...