2010-07-19 48 views
0

我有一个集成测试工具,这将启动一个控制台EXE几次,同时,在各自的AppDomain。一旦任何一个控制台exe应用程序退出其appdomain,它就会导致stdin,stdout,stderr关闭所有其余的控制台exe应用程序域。也就是说,即使应用程序继续,控制台也是关闭的。这太糟糕了,因为其他仍然活跃的“控制台应用程序”有额外的材料输出到屏幕。多个应用程序域:保持控制台打开

我想知道是否有办法让控制台保持打开状态,即使在控制台exe文件的一个应用程序域退出,直到我准备好了为控制台真正被关闭。

对于好奇,我的集成测试-线束从VS单元测试框架(vstesthost.exe)执行。我不认为细节与问题有关,但我希望控制台保持打开状态,直到测试完成。当然,单元测试框架不应该依赖于Console输出的值,但是它在调试测试时会有所帮助。顺便说一句,我从单元测试框架运行集成测试的事实是无关紧要的。 :)

+0

不能启动这些控制台应用程序作为单独的进程? – Grzenio 2010-07-20 10:42:03

+0

作为一个集成测试,我可能想同时执行其中的200个。这是我书中的过程。此外,我会在一个进程中获得更好的性能,例如,所有实例都将使用一个ThreadPool。 – 2010-07-20 19:31:32

回答

1

有趣的方法...我不知道,即使你解决这个问题,你打算怎么处理上std.out和std.err并发问题?

我已经这样做了前几次来解决整个问题:

  1. 创建应用程序域
  2. 创建新域
  3. 一个MarshalByRef对象传递一个自定义的TextWriter到新域
  4. 经由Console.Set替换在.NET中std.err和std.out值????(的TextWriter)
  5. 域中执行的一个或多个组件

希望你的想法,根据需要自定义的文本编写,然后可以同步输出。我不知道子应用程序域是否会继承父域的自定义Console.Out/Error,您也可以尝试这样做以简化所需的代码。

+0

在我的情况下,父应用程序域 - 由vstesthost.exe创建 - 似乎根本没有控制台输出/错误。虽然不改变你的观点 – 2010-07-20 02:09:30

相关问题