1

所以目前我在 Visual Studio 中有一个 C#/ASP.net 应用程序。我还有一个由其他人编写的 perl 脚本,我必须在我的 C#/ASP.NET 应用程序中使用它。最终目标是将我的 C#/ASP.NET 代码中生成的字符串传递到这个 perl 脚本(该字符串是文件路径),以便 perl 脚本运行并给出适当的输出。

我看了一遍,只找到了这个例子:

ProcessStartInfo perlStartInfo = new ProcessStartInfo(@"d:\Perl\bin\perl.exe");
perlStartInfo.Arguments = "c:\\word-splitter.pl " + "c:\\a.txt" + " ispell";
perlStartInfo.UseShellExecute = false;
perlStartInfo.RedirectStandardOutput = true;
perlStartInfo.RedirectStandardError = true;
perlStartInfo.CreateNoWindow = false;

Process perl = new Process();
perl.StartInfo = perlStartInfo;
perl.Start();
perl.WaitForExit();
string output = perl.StandardOutput.ReadToEnd();

链接在这里:http ://social.msdn.microsoft.com/Forums/vstudio/en-US/ea9455e1-b254-49e1-99df-41718ea80b5b/how-to-run-perl-scripts-in-c

问题是,每当我将此代码放入 Visual Studio 时,它都无法识别 ProcessStartInfo 或此代码块使用的任何其他命名空间。我错过了一个程序集吗?......这个块到底是做什么的?我试图搜索 Nuget 包和程序集,但只发现 PCRE(Perl 兼容正则表达式)无法安装,因为它与 .NetFramwork V4.5 不兼容。

所以我的问题是:在 C#/ASP.NET 应用程序中运行 perl 脚本的协议是什么?

谢谢。

4

1 回答 1

0

你的基本大纲是正确的,所以我不会费心给你一个分步指南。此外,我认为我不会像文档那样有帮助。但是,主要思想是ProcessStartInfo本质上用于设置生成单独进程所需的所有属性。然后,Process用于实际启动进程。WaitForExit()阻止您的程序继续执行,直到生成的进程完成。

不过,有些话我要说:

  1. 您正在重定向标准输出,但您似乎并没有真正告诉它去哪里。因此,试图ReadToEnd()真的没有任何地方可以阅读......

  2. 努力让流程首先运行。不要尝试重定向输入/输出或隐藏窗口,直到您可以生成进程,看到它工作/直接向终端提供输入,然后看着它退出。增量编程是你的朋友!

  3. 阅读文档链接。它相当简单,并提供了很好的代码示例。实际上,您需要担心的属性屈指可数,所以现在不要着迷于尝试调整每一件小事。

于 2013-06-27T23:00:48.003 回答