多个AppDomains:保持控制台打开

时间:2010-07-19 21:23:19

标签: c# .net unit-testing testing appdomain

我有一个集成测试工具,可以同时启动一个控制台exe,同时每个都在自己的appdomain中。一旦任何一个控制台exe应用程序退出其appdomain,它就会导致stdin,stdout,stderr关闭所有剩余的控制台exe应用程序域。也就是说,即使应用程序继续,控制台也会关闭。这太糟糕了,因为其他仍然活跃的“控制台应用程序”还有其他材料输出到屏幕上。

我想知道是否有办法使控制台保持打开状态,即使其中一个控制台exe应用程序域退出,直到我很好并准备让控制台真正关闭。

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

1 个答案:

答案 0 :(得分:1)

有趣的方法......我想,即使您解决了这个问题,您打算如何处理std.out和std.err上的并发问题?

我已经做了几次以解决整个问题:

  1. 创建应用域
  2. 在新域中创建MarshalByRef对象
  3. 将自定义TextWriter传递到新域
  4. 通过Console.Set ????(TextWriter)替换.Net中的std.err和std.out值
  5. 在域中执行一个或多个程序集
  6. 希望您明白这一点,您的自定义文本编写器可以根据需要同步输出。我不知道子app-domain是否会继承父域的自定义Console.Out / Error,你也可以尝试这样做以简化所需的代码。