我正在使用 C# 4.0。
我正在使用Microsoft.VisualStudio.TestTools.UnitTesting
.
我的 UnitTest 项目测试另一个项目,比如 ProjectA。ProjectA 创建一个这样的过程:
Process mplex = new Process();
psi = new ProcessStartInfo();
psi.CreateNoWindow = true;
psi.UseShellExecute = false;
psi.RedirectStandardError = true;
psi.FileName = "cmd.exe";
psi.Arguments = "/C mplex omittedForBrevity";
mplex.StartInfo = psi;
mplex.Start();
/* This is telling me: "'mplex' is not recognized
* as an internal or external command, operable
* program or batch file." */
var a = mplex.StandardError.ReadToEnd();
我已将“MPLEX.exe”放在各种 bin 中,包括“AppDomain.CurrentDomain.BaseDirectory”(这是我的 UnitTest 项目的 \bin\Debug\ 文件夹)。
MPLex.exe 基本上是微软对 GPLEX 的衍生产品,它是 Flex/Lex 的 C# 版本。当我在 ProjectA 中添加对 MPLex.exe 的引用并在对象浏览器中查看它时,我看不到任何看起来像 的方法Main
或与之交互的公共方式,否则我会这样做而不是通过 cmd 调用它我上面已经做了。
我认为正在发生的事情是在进行单元测试时,它不是在搜索 \bin\Debug\ 目录。当我从非单元测试 ProjectB 中的 Main 方法在 ProjectA 中运行相同的代码时,它工作正常。如果我能以某种方式强烈引用 .exe 以便将其复制到需要的任何地方,那么我认为我的问题将得到解决。我怎样才能做到这一点?
编辑:
添加这个修复了它,但据我所知,我可能刚刚破坏了其他尚未为人所知的东西。
System.IO.Directory.SetCurrentDirectory(AppDomain.CurrentDomain.BaseDirectory);