작업 및 해당 매개 변수에 대한 TaskStarted
이벤트를 수신하면 정보를 기록하는 MSBuild 로거 모듈을 작성하려고합니다.로거의 이벤트를 통해 MSBuild 사용자 지정 작업 속성 읽기
빌드는 명령을 실행 :
MSBuild.exe /logger:MyLogger.dll build.xml
build.xml 파일 내에서 사용자 정의 A (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 ...
}
빌드 하다니3210
각 작업을 시작으로, 로거 모듈은 다음과 같이 가입 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 또는 사용자 정의 빌드 작업을 변경할 수 없습니다.
누구나 내가 이것을 할 수있는 방법을 제안 할 수 있습니까?
감사합니다. 그러나 유감 스럽지만 여러 가지 이유로 사용자 지정 작업의 코드를 변경할 수 없습니다. 필자는 작업에 '도달'하고 싶지 않고 매개 변수가 전달되었는지 찾아 봅니다 (이름을 찾을 수있는 것과 같은 방식으로). 심지어 작업의 객체 참조를 얻는 것만으로도 반사를 사용할 수 있습니다. 다만 해킹 일 수 있습니다. 작업에서 여러 가지'Log.LogMessage()'호출이 있지만 전달되는 매개 변수만큼 일관성이 없습니다. LogMessage()도 매우 모호합니다 - 일반적으로 사용자 정의 이벤트를 청취하는 것이 일반적인 경우보다 좋을 수 있습니다 ? –