Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在新的应用程序域中运行时,如何将stdout放入mstest输出?_C#_.net_Mstest_Appdomain - Fatal编程技术网

C# 在新的应用程序域中运行时,如何将stdout放入mstest输出?

C# 在新的应用程序域中运行时,如何将stdout放入mstest输出?,c#,.net,mstest,appdomain,C#,.net,Mstest,Appdomain,我一直在开发测试框架,它创建了一个新的应用程序域来运行测试。主要原因是我们正在测试的dll有一些可怕的代码,这些代码依赖于位于应用程序域路径中的dll。(不,我无法更改此代码。) 我遇到的问题是,我的测试团队正在mstest中编写一系列功能测试,其中一个日志记录器写入Console.Out,没有在trx输出中捕获的任何日志信息。通过控制台应用程序运行代码时,所有日志信息都可以正常输出。其他已经实现的记录器也是如此 我的想法是,mstest正在将自己的TextWriter设置为Console.Ou

我一直在开发测试框架,它创建了一个新的应用程序域来运行测试。主要原因是我们正在测试的dll有一些可怕的代码,这些代码依赖于位于应用程序域路径中的dll。(不,我无法更改此代码。)

我遇到的问题是,我的测试团队正在mstest中编写一系列功能测试,其中一个日志记录器写入Console.Out,没有在trx输出中捕获的任何日志信息。通过控制台应用程序运行代码时,所有日志信息都可以正常输出。其他已经实现的记录器也是如此

我的想法是,mstest正在将自己的TextWriter设置为Console.Out,但新应用程序doamin有自己的TextWriter for Console.Out,因为新应用程序域有自己的静态设置


我很感激你的想法。

我觉得有点不好意思,但一旦我点击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)的测试。