A question came up on an internal DL about checking if an assembly was debug or release. I’m always looking for something to spout about, and this seemed like a good one.
There are 3 things people typically identify as the difference between debug & release. You need to decide which one you’re interested in:
“DEBUG” preprocessor flag. Can be set on the whole assembly/netmodule with ‘csc /define’, or on a whole file with #define.
Debugging information (pdb). Set with ‘csc /debug[+|-]’. It doesn’t affect codegen, so it’s really not very interesting.
Optimization. Set with ‘csc /optimize[+|-]’. In managed code, the JITter in the runtime does nearly all the optimization. The difference in generated IL from this flag is pretty small. The Whidbey C# compiler has more a difference on this flag than previous versions, but it’s still not much.
I don’t know of a way to ask what preprocessor flags were set for compiling a bit of code, but I would start my search by thinking about how they are applied at the file and assembly/netmodule scopes.