我一直在使用 MonoDevelop 和 Make 在 linux 下的 C 项目上执行一些构建任务,但我决定放弃 Make 并切换到 NAnt,因为我编写 C# 程序比 Make/shell 脚本更熟练,所以我决定用 C# 编写一个自定义 NAnt 任务来替换我的 Makefile。那么,如何从 C# 调用 GCC 或其他 shell 命令?
我还需要知道如何阻止执行直到 GCC 返回。
最佳答案
与 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 集成。
关于c# - 如何从 C#/Mono 调用 linux 程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3025010/