3

BuildResult実行時に C# プロジェクトをビルドした後にエラーを取得する方法を知りたいです。

現時点で私はこれを持っています:

string projectFileName = @"C:\Users\Inspire\Documents\Mono Projects\Library\Library\Library.csproj";
FileLogger fileLogger = new FileLogger();
fileLogger.Parameters = @"logfile=" + @"C:\Users\Inspire\Documents\Mono Projects\Library\Library\log.text";

ProjectCollection projectCollection = new ProjectCollection();
projectCollection.RegisterLogger(fileLogger);

Dictionary<string, string> GlobalProperty = new Dictionary<string, string>();       
GlobalProperty.Add("Configuration", "Debug");       
GlobalProperty.Add("Platform", "x86");

BuildRequestData buildRequest = new BuildRequestData(projectFileName, GlobalProperty, null, new string[] { "Build" }, null);
BuildResult buildResult = BuildManager.DefaultBuildManager.Build(new BuildParameters(projectCollection), buildRequest);
projectCollection.UnregisterAllLoggers();
Console.WriteLine(buildResult.OverallResult.ToString());

                    /* TODO: handle errors */

ビルド後にエラーを処理できるようにエラーを知りたい (ここにコメント セクションの「エラーの処理」FileLoggerがあります)。ご覧のようにファイルを追加しましたが、ファイルは常に空です (エラーの有無にかかわらず)。

ありがとう

4

1 に答える 1

6

これには少し遅れましたが、これをやろうとしている他の人にとって、私は同じ問題を抱えていました. 何らかの理由で、ロガーを ProjectCollection に登録すると、コンストラクターを介して BuildParamters オブジェクトに渡されません。検査すると、新しい BuildParameters(pc).loggers は null です。ハックのように感じますが、次のように BuildParameter オブジェクトにロガー コレクションを手動で設定しただけです。

FileLogger fl = new FileLogger() { Parameters = @"logfile=somepath" };

Dictionary<string, string> GlobalProperty = new Dictionary<string, string>();
GlobalProperty.Add("Configuration", "Debug");
GlobalProperty.Add("Platform", "x86");

BuildRequestData BuildRequest = new BuildRequestData(slnPath, GlobalProperty, null, new string[] { "Build" }, null);

BuildParameters bp = new BuildParameters();
bp.Loggers = new List<Microsoft.Build.Framework.ILogger> { fl }.AsEnumerable();

BuildResult buildResult = BuildManager.DefaultBuildManager.Build(bp, BuildRequest);

このメソッドを使用する場合は、pc.RegisterLogger を呼び出さないでください。複数のプロセスがログ ファイルにアクセスしようとしているというエラーが発生します。

于 2013-05-24T17:37:10.470 に答える