定义和取消定义符号
编译器符号是在编译时定义的关键字,可以检查该关键字以有条件地执行特定的代码段。
有三种方法可以定义编译器符号。它们可以通过代码定义:
#define MYSYMBOL
它们可以在 Visual Studio 中的项目属性>构建>条件编译符号下定义:
(请注意,DEBUG
和 TRACE
有自己的复选框,不需要明确指定。)
或者可以使用 C#编译器 csc.exe
上的/define:[name]
开关在编译时定义它们。
你还可以使用 #undefine
指令定义未定义的符号。
最常见的示例是 DEBUG
符号,当在调试模式下编译应用程序时(相对于发布模式),它由 Visual Studio 定义。
public void DoBusinessLogic()
{
try
{
AuthenticateUser();
LoadAccount();
ProcessAccount();
FinalizeTransaction();
}
catch (Exception ex)
{
#if DEBUG
System.Diagnostics.Trace.WriteLine("Unhandled exception!");
System.Diagnostics.Trace.WriteLine(ex);
throw;
#else
LoggingFramework.LogError(ex);
DisplayFriendlyErrorMessage();
#endif
}
}
在上面的示例中,当应用程序的业务逻辑中发生错误时,如果应用程序在调试模式下编译(并且设置了 DEBUG
符号),则错误将写入跟踪日志,并且异常将重新生成 -thrown 用于调试。但是,如果应用程序是在发布模式下编译的(并且未设置 DEBUG
符号),则使用日志记录框架来安静地记录错误,并向最终用户显示友好的错误消息。