debug.writeline - 如何在调试时在调试中获取它,在实时时如何获取文件

debug.writeline - how to get it in the debug when debugging and a file when in live

我即将上线一个 C# 项目,我正在努力解决一个简单的问题:如何在 Debug.WriteLine(""); 上线时(且仅在上线时)将其转换为输出文件?

我做了什么:我把这个添加到 app.config:

<system.diagnostics>
   <trace autoflush="true">
    <listeners>
      <add name="textListener"
           type="System.Diagnostics.TextWriterTraceListener"
           initializeData="trace.log" />
      <remove name="Default" />
    </listeners>
    </trace>
</system.diagnostics>

然后这是 bug.log class 我使用:

if (System.Diagnostics.Debugger.IsAttached)
{
    Debug.WriteLine(msg);
}
else
{
    Trace.WriteLine(msg);
}

如果它在调试器中(我想要的)我希望它写入调试 window 并在实时运行时写入输出文件('trace.log')(我想要的) ,但是这两个更改只是将所有内容放在 trace.log 中,无论如何。

如何设置它以便在实时构建中获得 trace.log 并在 Visual Studio 中获得 output > debug window(Microsoft Visual Studio Express 2013 for Windows Desktop)如果我不是现场直播,而是使用 Visual Studio?

中的 [ > Start] 按钮

如果您的意思是 "Release mode" 用于 "live" 而不是调试模式,那么:

#if DEBUG
Debug.WriteLine(msg);
#else
Trace.WriteLine(msg);
#endif

您当然可以用预编译器中的实际调试常量替换 DEBUG。

保持简单:

Debug.WriteLine(msg);
Trace.WriteLine(msg);

你总是追踪到一个日志。 如果 附加了调试器,您还可以登录调试器window。如果您想查看调试器输出,请确保您的解决方案 [ > Start] 确实附加了调试器。请参阅 How to: Change the Start Action for Application Debugging

您可以为 releasedebug 配置提供两个不同的 .config 文件,并在发布配置中添加一个新的侦听器以跟踪文件。要管理多个配置文件,请查看 Scott Hanselman 文章 Managing Multiple Configuration File Environments with Pre-Build Events.