C# 在新的应用程序域中运行时,如何将stdout放入mstest输出?
我一直在开发测试框架,它创建了一个新的应用程序域来运行测试。主要原因是我们正在测试的dll有一些可怕的代码,这些代码依赖于位于应用程序域路径中的dll。(不,我无法更改此代码。) 我遇到的问题是,我的测试团队正在mstest中编写一系列功能测试,其中一个日志记录器写入Console.Out,没有在trx输出中捕获的任何日志信息。通过控制台应用程序运行代码时,所有日志信息都可以正常输出。其他已经实现的记录器也是如此 我的想法是,mstest正在将自己的TextWriter设置为Console.Out,但新应用程序doamin有自己的TextWriter for Console.Out,因为新应用程序域有自己的静态设置C# 在新的应用程序域中运行时,如何将stdout放入mstest输出?,c#,.net,mstest,appdomain,C#,.net,Mstest,Appdomain,我一直在开发测试框架,它创建了一个新的应用程序域来运行测试。主要原因是我们正在测试的dll有一些可怕的代码,这些代码依赖于位于应用程序域路径中的dll。(不,我无法更改此代码。) 我遇到的问题是,我的测试团队正在mstest中编写一系列功能测试,其中一个日志记录器写入Console.Out,没有在trx输出中捕获的任何日志信息。通过控制台应用程序运行代码时,所有日志信息都可以正常输出。其他已经实现的记录器也是如此 我的想法是,mstest正在将自己的TextWriter设置为Console.Ou
我很感激你的想法。我觉得有点不好意思,但一旦我点击send并再次思考,问题就变得很明显,我找到了解决办法 问题是原来的Console.Out被mstest设置为一个新的TextWriter,但在我的新应用程序域中没有设置 因此,我在新appdomain中创建的类上创建了一个SetConsoleOut方法,并将其传递给Console.Out
TestFramework testFramework =
(TestFramework)newAppDomain.CreateInstanceAndUnwrap(
"TestFrameworkLibrary",
"MyNamespace.TestFramework");
testFramework.SetConsoleOut(Console.Out);
在TestFramework中,我添加了这个方法
internal void SetConsoleOut(TextWriter consoleOut)
{
Console.SetOut(consoleOut);
}
工作起来很有魅力。我对这里的礼节不太清楚。我应该删除该问题还是将我的答案添加到该问题?注意:此问题和接受的答案也适用于NUnit的“文本输出”窗口和创建新应用程序域(并写入stdout)的测试。