2010-07-17 52 views
2

我想创建一个称为一种时尚像这样一个自定义任务:创建的MSBuild CustomTask可以接受子XML元素或XML属性(的MSBuild 3.5)

<Target Name="Remap"> 
    <ItemGroup> 
     <Entry Key="key1" Value="value1" /> 
     <Entry Key="key2" Value="value2" /> 
    </ItemGroup> 

    <CustomTask 
     Entries="@(Entry)" 
    /> 
</Target> 

或者这样:

<Target Name="Remap"> 
    <ItemGroup> 
     <Entry> 
      <Key>key1</Key> 
      <Value>value1</Value> 
     </Entry> 
     <Entry> 
      <Key>key2</Key> 
      <Value>value2</Value> 
     </Entry> 
    </ItemGroup> 

    <CustomTask 
     Entries="@(Entry)" 
    /> 
</Target> 

我尝试了使用:

public class CustomTask : Task 
{ 
    public override bool Execute() 
    { 
     ... 
    } 

    [Required] 
    public ITaskItem[] Entries { get; set; } 
} 

但在第一种情况下,我得到的错误:

error MSB4066: The attribute "Key" in element <Entry> is unrecognized. 

而在第二种情况下,虽然没有错误,但Entries集合只是空的。

有没有办法使用MsBuild自定义任务完成此任务?

回答

1

项目在的ItemGroup必须有一个Include=属性标识,所以你可以试试:

<Target Name="Remap"> 
    <ItemGroup> 
     <Entry Include="key1"> 
      <Value>value1</Value> 
     </Entry> 
     <Entry Include="key2"> 
      <Value>value2</Value> 
     </Entry> 
    </ItemGroup> 

    <CustomTask 
     Entries="@(Entry)" 
    /> 
</Target> 

Value部分应显示为项目的元数据。