Я пытаюсь написать модуль регистрации MSBuild, который регистрирует информацию при получении TaskStarted
событий о Задаче и ее параметрах.
Сборка запускается командой:
MSBuild.exe /logger:MyLogger.dll build.xml
Внутри build.xml находится последовательность задач, большинство из которых были написаны на заказ для компиляции решения (C ++ или C #) и доступны с помощью следующей настраиваемой задачи:
<DoCompile Desc="Building MyProject 1" Param1="$(Param1Value)" />
<DoCompile Desc="Building MyProject 2" Param1="$(Param1Value)" /> <!-- etc -->
Пользовательская задача сборки DoCompile
определяется как:
public class DoCompile : Microsoft.Build.Utilities.Task
{
[Required]
public string Description { set { _description = value; } }
// ... more code here ...
}
Пока выполняется сборка, при запуске каждой задачи модуль регистратора получает IEventSource.TaskStarted
события, подписанные на следующее:
public class MyLogger : Microsoft.Build.Utilities.Logger
{
public override void Initialize(Microsoft.Build.Framework.IEventSource eventSource)
{
eventSource.TaskStarted += taskStarted;
}
private void taskStarted(object sender, Microsoft.Build.Framework.TaskStartedEventArgs e)
{
// write e.TaskName, attributes and e.Timestamp to log file
}
}
Проблема, с которой я столкнулся, заключается в том, что в приведенном выше методе taskStarted()
я хочу получить доступ к атрибутам задачи, для которой было сгенерировано событие.
У меня есть доступ только к коду журнала и я не могу изменить ни build.xml, ни пользовательские задачи сборки.
Кто-нибудь может подсказать, как я могу это сделать?