When things go wrong, it’s important that information is available to aid in diagnosing the problem. An IDE or debugger can assist greatly to this effect—but it is usually available only during development. Once an application ships, the application itself must gather and record diagnostic information. To meet this requirement, the .NET Framework provides a set of facilities to log diagnostic information, monitor application behavior, detect runtime errors, and integrate with debugging tools if available.
From Framework 4.0, there are also a new set of types to enforce code contracts. These allow methods to interact through a set of mutual obligations, and fail early if those obligations are violated.
The types in this chapter are defined primarily in the
You can conditionally compile any section of code in C# with
preprocessor directives. Preprocessor
directives are special instructions to the compiler that begin with the
# symbol (and, unlike other C# constructs, must
appear on a line of their own). The preprocessor directives for
conditional compilation are
#if directive instructs the
compiler to ignore a section of code unless a specified
symbol has been defined. You can define a symbol
with either the
#define directive or
a compilation switch.
to a particular file; a compilation switch applies to a whole ...