我一直在使用MonoDevelop和Make在linux下的C项目上执行一些构建,但我决定放弃Make并切换到NAnt,因为我比编写Make / shell脚本更熟练编写C#程序,所以我决定在C#中编写一个自定义的NAnt任务来替换我的Makefile。那么,我如何从C#调用GCC或其他shell命令?
我还需要知道在GCC返回之前如何阻止执行。
答案 0 :(得分:3)
与Windows相同 - 使用System.Diagnostics.Process。请注意,如果你重定向stdout / stderr并且缓冲区填满(这完全可以使用GCC),它可能会死锁,所以将它们收集到StringBuilders中。
var psi = new Process.StartInfo ("gcc", "-gcc -arguments") {
RedirectStandardError = true,
RedirectStandardOutput = true,
UseShellExecute = false,
};
var error = new System.Text.StringBuilder ();
var output = new System.Text.StringBuilder ();
var p = Process.Start (psi);
p.EnableRaisingEvents = true;
p.OutputDataReceived +=
(object s, DataReceivedEventArgs e) => output.Append (e.Data);
p.ErrorDataReceived +=
(object s, DataReceivedEventArgs e) => output.Append (e.Data);
p.WaitForExit ();
FWIW,您可能会考虑使用MSBuild的自定义任务(即Mono的“xbuild”)而不是NAnt,因为MonoDevelop的项目文件是MSBuild文件,而MonoDevelop有xbuild集成。
答案 1 :(得分:0)