簡體   English   中英

我需要從 C# 項目構建外部 C++ 解決方案

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM