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