1
我想寫接收關於任務和它的參數TaskStarted
事件時記錄信息的MSBuild記錄器模塊。閱讀通過事件的MSBuild的自定義任務屬性在Logger
構建運行與命令:
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或自定義構建任務。
任何人都可以提出一個方法,我可以做到這一點?
謝謝,但不幸的是我無法爲各種原因改變自定義任務的代碼。 我真的不希望「伸入」任務,只要找到其中它的參數傳遞(以同樣的方式我可以找出它的名字)。即使獲得任務的對象引用也足以能夠使用反射,儘管這只是一種破解。 我有不同的'Log.LogMessage()'正在通過從任務,但沒有作爲參數,以便不斷呼籲'的LogMessage()'是相當含糊過 - 或許監聽自定義事件可能是在一般情況下更好? – 2010-03-15 00:11:36