Я выполнил несколько пользовательских задач в MSBuild , но здесь я столкнулся с новой ситуацией.
Короче говоря, я хочу сделать это:
<Target Name="MyTarget">
<CustomTask Files="">
<Input Name="SomeName" Action="SomeActionName />
<Input Name="SomeName" Action="SomeActionName />
<Input Name="SomeName" Action="SomeActionName />
</CustomTask>
</Target>
Я хочу сделать это, так как нахожу это более читабельным, чем использование Itemgroups / propertygroups.
Есть атрибут, такой как Output , который почти то, что мне нужно. Вместо него должно быть Input (отсюда и название).
До сих пор я пытался решить эту проблему, используя две задачи: 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)?