2010-07-17 6 views
2

Je voudrais créer une tâche personnalisée qui est appelée de façon telle que:Créer msbuild CustomTask qui peut accepter des éléments sous xml ou attributs xml (msbuild 3.5)

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

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

Ou ceci:

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

J'ai essayé juste en utilisant:

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

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

Mais dans le premier cas, je reçois l'erreur:

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

Et dans le second cas, s'il n'y a pas d'erreur, la collection Entries est juste vide.

Existe-t-il un moyen d'accomplir cela avec les tâches personnalisées MsBuild?

Répondre

1

articles dans un ItemGroup doivent avoir un attribut Include= qui l'identifie, alors essayez quelque chose comme:

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

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

Les Value parties doivent apparaître sous forme de métadonnées dans les articles.

Questions connexes