如何在Debug与Release之间进行不同的编译?

McA*_*Lee 14 c# debugging release compilation

我是C#的新手,在编译C#项目时遇到问题.它是关于Debug和Release模式下的调试日志.我希望在调试模式下调用日志函数,但不要在发布模式下调用,同时考虑性能.我知道在C/C++中,这很容易做到:

// this is C/C++ sample, not C#
#ifdef DEBUG
#define DebugLog(CString,__VA_ARGS__) LogFunction(CString,__VA_ARGS__)
#else
#define DebugLog
#endif
Run Code Online (Sandbox Code Playgroud)

在上面的C/C++代码中,DebugLog()在Debug模式下编译和调用,但在Release模式下不编译或调用,因此可以确保性能.

C#中是否有与上述C/C++代码类似的东西?

Bal*_*a R 18

在C#中你可以做到

#if DEBUG
                //debug-mode only snippet go here.
#endif
Run Code Online (Sandbox Code Playgroud)

这是该指令的参考文档#if.


Han*_*ant 15

等效于方法的[Conditional]属性.像这样:

[Conditional("DEBUG")]
public static void DebugLog(string fmt, params object[] args) {
    // etc..
}
Run Code Online (Sandbox Code Playgroud)

在Release版本中(未定义DEBUG),编译器将删除方法和对方法的调用.在重新发明这个轮子之前,请务必查看.NET框架中的Debug和Trace类,他们已经这样做了.并且具有很大的灵活性来重定向调试/跟踪信息.