在发布模式下Console.SetOut出现问题?

Mat*_*sen 13 .net c c#

我在我的代码中有一堆Console.WriteLines,我可以在运行时观察到.我与我也写过的本地库进行通信.

我想在本地库中粘贴一些printf并观察它们.但是我没有在运行时看到它们.

我创建了一个令人费解的hello world应用程序来演示我的问题.当应用程序运行时,我可以调试到本机库并看到调用hello world.输出永远不会落在文本作者身上.请注意,如果相同的代码作为控制台应用程序运行,那么一切正常.

C#:

    [DllImport("native.dll")]
    static extern void Test();

    StreamWriter writer;

    public Form1()
    {
        InitializeComponent();

        writer = new StreamWriter(@"c:\output.txt");
        writer.AutoFlush = true;
        System.Console.SetOut(writer);
    }

    private void button1_Click(object sender, EventArgs e)
    {
        Test();
    }
Run Code Online (Sandbox Code Playgroud)

和原生部分:

__declspec(dllexport) void Test()
{
    printf("Hello World");
}
Run Code Online (Sandbox Code Playgroud)

更新:下面的hamishmcn开始讨论调试/发布版本.我在上面的button1_click方法中删除了本机调用,只是用标准的Console.WriteLine.net调用替换它.当我在调试模式下编译并运行它时,消息被重定向到输出文件.当我切换到释放模式时,呼叫没有被重定向.控制台重定向似乎只在调试模式下工作.我该如何解决这个问题?

Mat*_*sen 1

控制台重定向仅在调试模式下有效。