2012-07-22 72 views
1

我正在使用C#4.0。我如何强烈引用.exe文件?

我正在使用Microsoft.VisualStudio.TestTools.UnitTesting运行单元测试。

我的UnitTest项目测试另一个项目,比如ProjectA。项目A创建了这样一个过程:

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”内的各种彬的,包括“AppDomain.CurrentDomain.BaseDirectory”(这是的\ bin \调试\文件夹我的单元测试项目)。

MPLex.exe基本上是Microsoft的GPLEX衍生产品,它是Flex/Lex的C#版本。当我在ProjectA中添加对MPLex.exe的引用并在Object浏览器中查看它时,我没有看到任何看起来像Main的方法,或者与之连接的公共方法,否则我会这样做而不是通过cmd调用它正如我上面所做的那样。

我认为发生了什么是它正在进行单元测试,它不是搜索\ bin \ Debug \目录。当我在非单元测试ProjectB中的Main方法中运行ProjectA中的相同代码时,它工作正常。如果我能以某种方式强烈引用.exe,以便在需要时将它复制到任何地方,那么我认为我的问题将得到解决。我怎样才能做到这一点?

编辑:

添加这个固定的,但就我所知,我可能刚分手别的尚未作出自己知道,但。

System.IO.Directory.SetCurrentDirectory(AppDomain.CurrentDomain.BaseDirectory); 
+0

你可以只添加一个引用mplex在测试项目中?此外,mstest不会运行bin外的测试,它会在运行之前复制到部署目录。 – 2012-07-22 06:00:55

+0

我没有在我的测试项目中添加对MPLex.exe的引用。然而,一旦我做到了,它仍然无法工作。我怀疑引用的DLL和EXE的不复制,除非编译器/链接器/无论什么决定,他们实际上*使用*。至少不要在本单元测试使用的\ out \ bin目录下。 – 2012-07-22 06:38:33

回答

1

mstest不会运行你的单元测试。它将测试和引用的程序集复制到测试部署文件夹中,通常在解决方案目录下的TestResults下。我有“单元”测试过类似的组件,并且始终需要使用部署功能,这很容易让人头疼,但这里却是如此。

首先,您的测试设置必须启用部署。转到testsettings文件并选择部署选项卡并单击启用部署。根据解决方案的结构,您可以在这里添加mplex文件。在我们的项目中,我不这样做,因为必要的文件通常在测试的源代码控制树之外,VS会投诉,如果是这种情况,请使用下面描述的文件链接。

您还可以将DeploymentItem属性添加到特定的测试或测试类,并且只有在运行这些测试时才会复制该文件。如果它是一个大型数据文件,并且您不希望一直进行复制,这会很有帮助。

如果必要的文件不在测试解决方案中,请在测试项目中添加必要的文件作为链接,并将生成操作设置为始终复制。然后添加到测试集中的已部署文件或使用DeploymentItem属性。

1

该.exe是一个C#编译的代码,除了它有一个额外的头描述代码的入口点,它类似于一个DLL。

我做了以下步骤,它为我工作。

1 - 创建一个静态方法主要和非静态方法

namespace TestConsole1 
{ 
    public class Program 
    { 
     public static void Main(string[] args) 
     { 
      Console.Write("hello 1st"); 
     } 

     public void TestMethod2() 
     { 
      Console.Write("hello 2nd"); 
     } 
    } 
} 

2 exe文件 - 参考它在另一个类库项目作为项目引用和下面的代码只是正常工作。

TestConsole1.Program prg = new TestConsole1.Program(); 

prg.TestMethod2(); 

我也试图从“some.exe”到“some.dll”改变EXE名称,然后在项目中引用它,也没关系,它的工作。

+0

抱歉一些代码标签不工作! – Anand 2012-07-22 06:29:23

+0

就你的格式而言,它是“1”。 - 我将它改为“1”,它似乎工作。我不想花时间搞一个更优雅的解决方案哈哈....事情是主要的方法是不公开的,或者我会做你刚做的事情。我(想)我需要以某种方式引用.exe,而不是一个方法或类。我想我需要什么可能是链接器要知道它。 – 2012-07-22 06:35:14

1

在项目中引用.exe bin是一种不好的做法。我建议: -set您的环境路径变量mplex -call mplex从路径通过(即mplex为您的ShellExecute参数命令行) 最好的方面在cmd