如何在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>
值
答案 0 :(得分:2)
元数据与item不同,您可以为一个项目设置不同的metadatas,但只为元数据设置一个值。
在Microsoft.Build.Engine程序集( BuildItem.EvaluateAllItemMetadata(...))上使用Reflector,您会看到项目的元数据存储在Dictionnary中,因此对于给定的元数据名称,您只能有一个值。
您的案例中的解决方法是使用元数据作为项目的名称,如下所示:
<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);