2013-03-26 29 views
2

我想知道如何在運行時構建C#項目後獲得BuildResult的錯誤。項目集合構建錯誤記錄器

在momment我有這樣的:

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文件,你可以看到,但文件總是空的(有錯誤或沒有)。

感謝

+0

檢查詳細程度。嘗試使用這個新的FileLogger(){參數= @「日誌文件= d:\ somelog.txt」,Verbosity = LoggerVerbosity.Detailed}) – Daniil 2013-03-26 12:50:32

回答

4

在這一個有點晚,但對於其他人試圖做到這一點,我有同樣的問題。出於某種原因,當你使用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,否則你會得到關於多個錯誤嘗試訪問日誌文件的進程。