2010-07-17 31 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部分應顯示爲項目的元數據。