System.Diagnostics.Trace调用何时包含在Visual Studio 2013构建中?

时间:2016-04-26 14:08:03

标签: c# asp.net visual-studio-2013 system.diagnostics tracesource

在使用Visual Studio 2013构建的应用程序中,我未选中TRACE常量:

enter image description here

根据我的理解,这应该意味着System.Diagnostics.TraceSource对象所做的任何调用都不会包含在每个MSDN的编译代码中

例如,当未定义Trace常量并构建项目时,下面对TraceInformation()的调用将不会出现在已编译的代码中:

TraceSource ts = new TraceSource("MyTraceSource");
ts.TraceInformation("This will not be included in compiled code.");
多年来,我一直这样做,从来没有遇到过问题。今天,在一个混合的Asp.Net webforms / mvc应用程序中,我添加了对公共静态类,属性getter和setter以及函数的跟踪,如下所示:

public static class MyClass
{
    private static TraceSource ts = new TraceSource("MySource");

    private static string _s;
    public static string MyString
    {
        get
          {
            ts.TraceInformation("I don't expect to see this in compiled code.")
            return _s;
          }

    }

...并且发现编译代码中的跟踪调用很震惊。为什么Visual Studio在编译代码中包含这些跟踪调用?

奇怪的是,这个问题恰好出现在这一课中。该应用程序有数百个跟踪调用(在页面后面的代码中,在引用的项目中等等),但只有在这一个类中,跟踪调用才能使它成为已编译的代码。

我最初认为这与公共静态类或具有静态属性getter和setter有关,但是快速构建测试项目表明不是这样。

我寻找短语" #TRACE"在解决方案中,但它没有在任何地方定义。

即使我在代码模块的顶部包含这些神奇的单词:

#undef TRACE

Visual Studio仍在编译代码中包含跟踪调用。

这是一个古老而庞大的应用程序。是否有某些设置隐藏在某处,告诉Visual Studio 2013有时在编译代码中包含跟踪调用?

0 个答案:

没有答案