Я столкнулся с той же проблемой при запуске тестов, которые выполняли код с вызовами Trace.WriteLine. Выполнение одного теста - это нормально, но запуск нескольких тестов вызвал следующий стек вызовов:
System.IO.__Error.WriterClosed()
System.IO.StringWriter.Write(Char[] buffer, Int32 index, Int32 count)
System.IO.TextWriter.WriteLine(String value)
System.IO.TextWriter.SyncTextWriter.WriteLine(String value)
System.Diagnostics.TextWriterTraceListener.WriteLine(String message)
System.Diagnostics.TraceInternal.WriteLine(String message)
System.Diagnostics.Trace.WriteLine(String message)
После некоторого исследования я обнаружил, что размещение следующего кода в вашей тестовой установке обошло проблему:
[TestInitialize()]
public void Setup()
{
Array.ForEach((from TraceListener tl in Trace.Listeners
where tl.Name != "Default"
select tl).ToArray(),
tl => Trace.Listeners.Remove(tl));
}
Очевидно, что при работе в среде mstest возникает проблема с несколькими прослушивателями трассировки. MSTest добавляет System.Diagnostics.TextWriterTraceListener, который использует поток, который удаляется после первого теста. Обходной путь просто удаляет все прослушиватели Trace, отличные от заданных по умолчанию, эффективно удаляя прослушиватель, добавленный mstest. Кажется, проблема связана с неправильной обработкой потока трассировки, созданного mstest. Ранее я заявлял, что mstest создает AppDomain для каждого теста. Это не правда.
Я вижу, что вы отправили сообщение об ошибке в Microsoft здесь , но не получили никаких полезных отзывов. Надеюсь, это быстрое исправление будет работать для вас, как и для меня.