Несколько доменов приложений: держать консоль открытой - PullRequest
0 голосов
/ 20 июля 2010

У меня есть комплект для тестирования интеграции, который запускает консольный exe несколько раз одновременно, каждый в своем собственном домене приложения.Как только любое из консольных exe-приложений выходит из своего домена приложений, это приводит к отключению stdin, stdout, stderr для всех оставшихся консольных exe-приложений.То есть консоль закрыта, хотя приложение продолжается.Это очень плохо, потому что другие все еще активные «консольные приложения» имеют дополнительный материал для вывода на экран.

Я хотел бы знать, есть ли способ сделать консоль открытой, даже есликонсоли exe appdomains завершает работу, пока я не буду в порядке и готов к консольному завершению работы.

Для любопытных мой интеграционный тестовый жгут выполняется из среды модульного тестирования VS (vstesthost.exe),Я не думаю, что эта деталь имеет отношение к вопросу, но я бы хотел, чтобы консоль оставалась открытой, пока мой тест не будет завершен.Конечно, инфраструктура модульного тестирования не должна полагаться на вывод консоли в качестве значения, но это помогает, когда я отлаживаю тесты.Кстати, тот факт, что я запускаю интеграционное тестирование из фреймворка для юнит-тестирования, не по теме.:)

1 Ответ

1 голос
/ 20 июля 2010

Интересный подход ... Интересно, даже если вы исправите это, как вы собираетесь решать проблемы с параллелизмом на std.out и std.err?

Я делал это раньше несколько раз, чтобырешить всю проблему:

  1. создать домен приложения
  2. создать объект MarshalByRef в новом домене
  3. передать пользовательский TextWriter в новый домен
  4. заменить значения std.err и std.out в .Net через Console.Set ???? (TextWriter)
  5. Выполнить одну или несколько сборок в домене

НадеемсяВы поймете, что ваш собственный редактор текста может синхронизировать вывод по мере необходимости.Я не знаю, будет ли дочерний домен приложений наследовать пользовательский Console.Out / Error родительского домена или нет, вы можете просто попытаться сделать это, чтобы упростить необходимый код.

...