2012-02-06 12 views
15

Como estás desarrollando utiliza a menudo cosas comomanera elegante para detener la compilación de liberación con el error

throw new NotImplementedException("Finish this off later") 

o

// TODO - Finish this off later 

como un marcador de posición para recordarle que debe terminar algo fuera - pero estos pueden ser extrañado y equivocadamente terminar en el lanzamiento.

Usted podría utilizar algo así como

#if RELEASE 
    Finish this off later 
#endif 

por lo que no se compilará en la versión de lanzamiento - ¿Pero hay una forma más elegante?

+0

Crear una tarea de deuda técnica (JIRA, TFS, CQ, lo que sea)? – sll

+0

Por cierto, yo diría que dicho control debería ser parte del proceso de compilación, ¿tal vez registrarlo? La mayoría de los sistemas de control de versiones tienen ganchos que pueden manejar tales casos. – Snowbear

+1

@Snowbear Entonces, ¿no les permite registrarse hasta que todo esté terminado, o simplemente no lo construye con un TODO? – weston

Respuesta

11

vi una implementación elegante here

#if DEBUG 

namespace FakeItEasy 
{ 
    using System; 
    using System.Diagnostics.CodeAnalysis; 

    /// <summary> 
    /// An exception that can be thrown before a member has been 
    /// implemented, will cause the build to fail when not built in 
    /// debug mode. 
    /// </summary> 
    [Serializable] 
    [SuppressMessage("Microsoft.Design", 
     "CA1032:ImplementStandardExceptionConstructors", 
     Justification = "Never used in production.")] 
    public class MustBeImplementedException 
     : Exception 
    { 
    } 
} 

#endif 
+0

¿Cómo funciona? – crazy2be

+2

@ crazy2be - haces que tus métodos inacabados arrojen la 'MustBeImplementedException'. La directiva del compilador' #if DEBUG' se asegura de que la clase 'MustBeImplementedException' solo compila en depurar, por lo que para la compilación de lanzamiento cualquier lanzamiento olvidado dará como resultado la compilación de ruptura porque la clase no está disponible. – PHeiberg

10

recomendaría utilizar #warning:

#warning Finish this off later 

Y en la configuración Release establecer Treat Warnings as Errors a True.

En este caso en Debug solo lo verá como advertencias, pero en el lanzamiento arrojará excepciones.

+0

Problema: hay algunas advertencias que deseamos ignorar (por ejemplo, llamar a los métodos API ahora marcados como [obsoletos] en la versión nueva, pero donde queremos una fuente única para la versión antigua/nueva. – Ryan

+1

Puede configurar qué tipos de advertencias se deben ignorar. es el hilo relacionado: http://stackoverflow.com/questions/267168/treat-all-warnings-as-errors-except-in-visual-studio – Samich

10

Puede utilizar los #error y #warning directivas a lanzar sus propios errores de generación y advertencias:

#if RELEASE 
#error Not finished! 
#endif 

http://msdn.microsoft.com/en-us/library/c8tk0xsk(v=vs.80).aspx

+0

Me gusta tanto + pero la respuesta de PHeibergs tiene la ventaja de ser un trazador de líneas en uso, así que le di la respuesta. – Ryan

1

Se puede encapsular este en su propio método, de esa manera solo tiene que ser cambiado en un solo lugar por un rele ase construir.

void NotImplemented() 
{ 
    #if RELEASE 
     Finish this off later 
    #endif 
} 
Cuestiones relacionadas