1

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

在此处输入图像描述

据我了解,这应该意味着 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 有时在编译代码中包含跟踪调用的设置?

4

0 回答 0