定义和取消定义符号

编译器符号是在编译时定义的关键字,可以检查该关键字以有条件地执行特定的代码段。

有三种方法可以定义编译器符号。它们可以通过代码定义:

#define MYSYMBOL

它们可以在 Visual Studio 中的项目属性>构建>条件编译符号下定义:

VS 编译器符号

(请注意,DEBUGTRACE 有自己的复选框,不需要明确指定。)

或者可以使用 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 符号),则使用日志记录框架来安静地记录错误,并向最终用户显示友好的错误消息。