c# - 如何从 C#/Mono 调用 linux 程序?

标签 c# mono nant monodevelop

我一直在使用 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/

相关文章:

c# - 如何在 C# 中使用 OpenXML 更新所有字段(交叉引用)?

c# - MongoDB 2.4.8 限制集合和可尾游标消耗所有内存

c# - 尝试检测 iOS 手机是否处于静音状态时遇到问题?

linux - 在命令行(或项目文件以外的其他地方)指定对 xbuild 的引用

.net - 使用托管 C++ (.NET 2.0) 的自动构建工具

c# - 公共(public)属性 List 需要 Concat 2 types with inheritance

asp.net-mvc - 在 Mono 2.4 上将 Microsoft 数据 Entity Framework 与 Microsoft MVC 结合使用

c# - 在 Mono : invalid conversion of function? 中将 C++ 公开给 C#

cruisecontrol.net - 在开发人员/构建机器上部署 biztalk

sql - 我怎样才能找出这个连接字符串有什么问题?