1

TaskStartedタスクとそのパラメーターに関するイベントを受信したときに情報をログに記録するMSBuildロガーモジュールを作成しようとしています。

ビルドは次のコマンドで実行されます。

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またはカスタムビルドタスクを変更できません。

誰かが私がこれを行うことができる方法を提案できますか?

4

1 に答える 1

1

あなたは間違った方法でこれに近づいています。ロガーは、実行中のタスクに到達できないようにする必要があります。それは逆です。タスクはロガーでメッセージをログに記録する必要があります。したがって、あなたの場合、すべてのメッセージをロガーに登録するために、DoCompileタスク(および作成した他のタスク)を拡張する必要があります。したがって、Executeメソッド内に、Log.LogMessage(...)関心のあるプロパティをログに記録するためのメッセージをいくつか入れてください。

于 2010-03-14T18:02:37.040 に答える