Для того, чтобы передать в Task параметр, необходимо создать public property:
public String MyParameter {
get { ... }
set { ... }
}
<MyTask MyParameter="Something here">...</MyTask>
Для указания, что параметр является обязательным, - можно пометить атрибутом [Required]:
[Required]public String MyParameter {
get { ... }
set { ... }
}
Результат работы Task-а можно "отдать" в виде Output-переменных, пометив нужные свойства атрибутом [Output]:
[Output]
public String MyOutParameter {
get { ... }
set { ... }
}
<MyTask MyParameter="Something here"> <Output TaskParameter=">
</MyTask><Message Text="MyTask returned $(MyItem) to me!"/>
Для упрощения жизни с MSBuild существует сборка Microsoft.Build.Utilities, в которой существуют простейшие реализации классов Task, TaskItem и пр.
Вопрос: А что если Property нужно иметь не скалярного типа, а массив - что тогда делать? Пример - надо вписать несколько атрибутов InternalsVisibleTo в исходный код.
можно, конечно, перечислить их через разделитель в строке, а потом выполнить String.Split, но как-то это некрасиво выглядит
MSBuild Task Reference (MSDN)
Tasks provide the code that runs during the build process.