代码之家  ›  专栏  ›  技术社区  ›  Nathan

创建可以接受子xml元素或xml属性的Msbuild CustomTask(Msbuild 3.5)

  •  2
  • Nathan  · 技术社区  · 15 年前

    我想创建一个自定义任务,它以如下方式调用:

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

    有没有一种方法可以通过MsBuild自定义任务来实现这一点?

    1 回复  |  直到 15 年前
        1
  •  1
  •   Jay Bazuzi Buck Hodges    15 年前

    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