Как я могу вызвать программы Linux из C # / Mono? - PullRequest
2 голосов
/ 11 июня 2010

Я использовал MonoDevelop и Make для выполнения некоторых сборок на C-проекте под Linux, но я решил отказаться от Make и перейти на NAnt, так как я более опытен в написании программ на C #, чем скрипты Make / shell, поэтому решил написать пользовательскую задачу NAnt в C #, чтобы заменить мой Makefile. Итак, как я могу вызвать GCC или другие команды оболочки из C #?

Мне также нужно знать, как заблокировать выполнение, пока не вернется GCC.

Ответы [ 2 ]

3 голосов
/ 11 июня 2010

Это так же, как в 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 (т. е. Monu «xbuild») вместо NAnt, поскольку файлы проекта MonoDevelop являются файлами MSBuild, а MonoDevelop имеет интеграцию с xbuild.

0 голосов
/ 11 июня 2010

Может быть, это поможет:

http://mono -project.com / Howto_PipeOutput

По сути, это то же самое, что .NET в Windows.

...