[英]I need to build external C++ solutions from a C# project
我正在開發一個程序,該程序在目錄中查找解決方案文件,然后在指定的配置和平台上構建您選擇的任何文件,但我正在努力使其在 C# 中工作。 我希望構建的解決方案是 C++,這是值得的。 我有一個 C++ 版本的程序,但想轉換它以獲得 Winforms GUI 的額外好處。
我很高興使用任何可用的方法,並嘗試了以下兩種方法,但每種方法都有其自身的問題。
private void buildSolution1(string solution, Tuple<string, string> config)
{
logEvent("Building " + solution + " on " + config.Item1 + "|" + config.Item2);
ProjectCollection pc = new ProjectCollection();
Dictionary<string, string> globalProperty = new Dictionary<string, string>();
globalProperty.Add("Configuration", config.Item1);
globalProperty.Add("Platform", config.Item2);
globalProperty.Add("OutputPath", @"C:\data");
BuildParameters bp = new BuildParameters(pc);
BuildManager.DefaultBuildManager.BeginBuild(bp);
BuildRequestData buildRequest = new BuildRequestData(solution, globalProperty, "4.0", new string[] { "Build" }, null);
BuildSubmission submission = BuildManager.DefaultBuildManager.PendBuildRequest(buildRequest);
submission.ExecuteAsync(null, null);
while (!submission.IsCompleted)
{
logEvent("building");
}
BuildManager.DefaultBuildManager.EndBuild();
logEvent(submission.BuildResult.OverallResult.ToString());
}
private void buildSolution2(string solution, string config)
{
string devenv = Environment.ExpandEnvironmentVariables("\"%VS120COMNTOOLS%..\\ide\\devenv.com\"");
string cmdArg = "/c" + devenv + " \"" + solution + "\" /build " + "\"" + config + "\"";
System.Diagnostics.Process process = new System.Diagnostics.Process();
System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo();
startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
startInfo.WorkingDirectory = @"C:\";
startInfo.FileName = "cmd.exe";
startInfo.UseShellExecute = false;
startInfo.Arguments = cmdArg;
process.StartInfo = startInfo;
process.Start();
process.WaitForExit();
}
在任何一種情況下,“字符串解決方案”都作為我要構建的解決方案的路徑傳入,配置要么是包含配置和平台的元組,要么是包含兩者的字符串,以“|”分隔象征。 logEvent() 只是一個打印到我的 GUI 的函數。
buildSolution1():這個每次都失敗,我不知道為什么。 它非常快速地打印出“構建”多次,然后將“總體結果”報告為“失敗”。
buildSolution2():這個打開 CMD.exe 沒有傳遞任何參數並且不運行任何東西。 如果在開始時沒有 /c 屬性,它只會讓空白窗口保持打開狀態。 有了它,它只是打開然后很快又關閉。
希望有人可以幫助我,提前感謝您的時間。
詹姆士
為了其他有類似問題的人的利益,我能夠使用以下代碼使該函數工作:
private void buildSolution(string solution, string config)
{
string devenv = Environment.ExpandEnvironmentVariables("\"%VS120COMNTOOLS%..\\ide\\devenv.com\"");
string cmdArg = "\"" + solution + "\" /build " + "\"" + config + "\"";
System.Diagnostics.Process process = new System.Diagnostics.Process();
System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo();
startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
startInfo.WorkingDirectory = @"C:\";
startInfo.FileName = devenv;
startInfo.UseShellExecute = true;
startInfo.Arguments = cmdArg;
process.StartInfo = startInfo;
process.Start();
process.WaitForExit();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.