he empezado a utilizar una clase definir así:Defines.Debug vs DEBUG #if
internal sealed class Defines
{
/// <summary>
/// This constant is set to true iff the define DEBUG is set.
/// </summary>
public const bool Debug =
#if DEBUG
true;
#else
false;
#endif
}
Las ventajas que veo es:
- Asegura que no rompa la materia que, con un #if .. # else .. # endif no sería verificado por el compilador.
- Puedo hacer una búsqueda de referencias para ver dónde se usa.
- A menudo es útil tener un bool para la depuración, el código define es más largo/más desordenado.
desventaja Posible veo:
compilador no puede optimizar el código no utilizado si la clase definida se encuentra en otro montaje. Por eso he hecho interno.
¿Me faltan otras desventajas?
[Editar] Los ejemplos típicos de uso:
private readonly Permissions _permissions = Defines.Debug ? Permissions.NewAllTrue()
: Permissions.NewAllFalse();
O:
var str = string.Format(Defines.Debug ? "{0} {1} ({2})" : "{0} {1}", actual, text, advance);
¿Ha mirado el ['ConditionalAttribute'] (http://msdn.microsoft.com/en-us/library/system.diagnostics.conditionalattribute.aspx) en absoluto? – Oded
@Oded Gracias, he agregado ejemplos típicos, solo pequeñas modificaciones en líneas únicas, no métodos completos o clases en las que la ConditionalAttribute se ajusta, o simplemente no debería ser tan vago y definir dos métodos para estas líneas. – weston
¿Qué sucede si el ensamblado que contiene esto está construido en 'Debug' pero aquellos que lo hacen referencia están construidos en' Release'? – Oded