Создайте Msbuild CustomTask, которая может принимать вложенные элементы XML или атрибуты XML (msbuild 3.5) - PullRequest
2 голосов
/ 17 июля 2010

Я хотел бы создать пользовательскую задачу, которая вызывается следующим образом:

 <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 Ответ

1 голос
/ 17 июля 2010

Элементы в группе элементов должны иметь атрибут 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 должны отображаться в виде метаданных в элементах.

...