在使用 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 有时在编译代码中包含跟踪调用的设置?