Как создать таск в MSBuild?

Разработка на C# под linux,
Создать Class Library проект, к примеру MyMSBuildTasks;
  • Добавить Assembly Reference на Microsoft.Build.Framework;
  • Создать public class MyTask, который наследует и реализует интерфейс Microsoft.Build.Framework.ITask;
  • Реализовать метод public override bool Execute(), вернуть true в случае успеха;
  • Подключить его в проект MSBuild следующим образом: <UsingTask TaskName="MyMSBuildTasks.MyTask" AssemblyFile="...\MyMSBuildTasks.dll"/>
  • Пользоваться: <MyTask MyParameter="Something here">...</MyTask>
  • Для того, чтобы передать в 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="MyOutParameter" ItemName="MyItem"/> </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.

    Создал комент про ненужность ILMerge:
    https://github.com/deveel/deveeldb/issues/73#issuecomment-268085201

    Примеры, откуда я могу скопировать код:
    ResolveAssemblyReference Task
    https://msdn.microsoft.com/en-us/library/9ad3f294.aspx
    Assemblies Optional ITaskItem[] parameter.

    WriteLinesToFile Task
    Writes the specified items to the specified text file.