2010-07-19 117 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

相關問題