c# - 具有可变输入参数数量的 MSBuild 自定义任务

标签 c# msbuild task

我在 MSBuild 中完成了几个自定义任务,但我在这里面临着新的情况。

简而言之,我想这样做:

<Target Name="MyTarget">
  <CustomTask Files="">
     <Input Name="SomeName" Action="SomeActionName />
     <Input Name="SomeName" Action="SomeActionName />
     <Input Name="SomeName" Action="SomeActionName />
  </CustomTask>
</Target>

我想这样做,因为我发现它比使用项目组/属性组更具可读性。 有一个诸如 Output 之类的属性几乎就是我所需要的。它应该只是输入(因此得名)。

到目前为止,我已尝试使用两个任务来解决此问题:CustomTask 和 InputTask。

请注意,输入不一定是任务。这只是一个测试和获取可变大小的输入集合的一种方法。

public class CustomTask : Task
{
    [Required]
    public TaskItem[] Files { get; set; }

    public InputTask[] Subs { get; set; }

    public override bool Execute()
    {
        if(Subs != null)
        {
            Subs.ToList().ForEach(sub => sub.Execute());
        }
        else
        {
            Log.LogMessage("No Subs");
        }
        return true;
    }
}

public class InputTask: Task
{
    [Required]
    public TaskItem Name{ get; set; }

    [Required]
    public TaskItem Action{ get; set; }

    public override bool Execute()
    {
        Log.LogMessage("" + Name + " should " + Action);
        return true;
    }
}

这个想法是 MBSuild 可以“检测”子任务,然后将它们交给我,但我只是收到 MSB4067 错误。

我查了很多在线操作系统任务和官方文档,但没有找到这样的例子。

这是否可以这样做?

如果没有,您建议我如何解决此问题(PropertyGroup/ItemGroup/Other)?

最佳答案

你想做的事情是不可能的。您可以使用项目元数据来近似它。

<Target Name="MyTarget"> 

   <ItemGroup>
      <Input Identity="SomeName"><Action>SomeActionName</Action></Input>
      <Input Identity="SomeName"><Action>SomeActionName</Action></Input> 
      <Input Identity="SomeName"><Action>SomeActionName</Action></Input>
   </ItemGroup>

   <CustomTask Files="" Input="@(Input)"> 

</Target>

关于c# - 具有可变输入参数数量的 MSBuild 自定义任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7704586/

相关文章:

c# - Jetbrains Rider 指定运行时构建参数

c# - 使用 .FromAsync 任务状态 = WaitingForActivation

c# - 如何使用 Core 2.2 中的身份在浏览器关闭 15 分钟后保持 session 事件?

c# - 在 SQL Server 数据库上执行简单查询时没有错误或结果

c# - LINQ 交叉连接错误

azure - VS 2012 使用 MSBuilld 命令发布配置文件和复制文件

c# - 单声道:无法加载文件或程序集 'System.Threading.Tasks.Dataflow'

api - 如何使用curl在Salesforce中创建任务?

c# - 从异步编程模型 (APM) 转向基于任务的异步模式 (TAP)

c# - 如何在Orchard Modules中实现多线程?