I need to add some logging to my app, and it needs to be in release mode, and I need to make sure that the logging code isn’t running in production. Therefore I’d like to use a #define and #if to make sure the log statements are removed when I move to production.
Trouble is, I need the logging in multiple files, and it’s a pain to put a #define at the top of every file. Is there a way to have a centralized #define? That way I can remove the single #define rather than a #define from all files(which means I’ll almost assuredly forget one).
On the command line, use the
/defineswitch. In Visual Studio, choose the “Build” tab from the properties page for the project and fill in the “Conditional Compilation Symbols” section.Consider also instead of using conditional compilation, to instead make your logging methods conditional methods. That’s a more pleasant-looking alternative. That’s how Debug.Assert works; it is a conditional method, so if the debug preprocessor symbol is not defined, the compiler simply removes all calls to the method before code generation.
See also my article on the subject:
http://ericlippert.com/2009/09/10/whats-the-difference-between-conditional-compilation-and-the-conditional-attribute/