🔧 Debug has Symbols. Release has Optimizations.
Debug builds are slow, good for debugging. Release builds are fast, good for production. Solution configurations switch between them.
📝 Debug vs Release
Debug: - No optimizations (easier debugging) - Includes debug symbols (.pdb files) - #if DEBUG code runs - Slower execution - Larger binary size - Condition compilation symbols: DEBUG Release: - Optimizations enabled (faster) - No debug symbols (smaller) - #if RELEASE code runs - Faster execution - Smaller binary size - Condition compilation symbols: RELEASE, TRACE
🎯 Conditional Compilation
// Only runs in Debug
#if DEBUG
Console.WriteLine("Debug mode");
LogDetailedInfo();
#endif
// Only runs in Release
#if RELEASE
Console.WriteLine("Release mode");
OptimizePerformance();
#endif
// Conditional attribute
[Conditional("DEBUG")]
public static void LogDebug(string message)
{
Console.WriteLine($"DEBUG: {message}");
}
// Multiple configurations
#if DEBUG || STAGING
UseTestDatabase();
#else
UseProductionDatabase();
#endif
💡 Custom Configurations
- Build → Configuration Manager → New
- Create: Staging, QA, Production
- Set custom #if STAGING, #if QA
- Different connection strings per configuration
“Accidentally deployed Debug build to production. Slow performance. Switched to Release. Now 50% faster. Always use Release for production.”
