2010-05-13 15 views

Respuesta

4

No creo que haya una forma de compilar código de forma condicional en la versión del sistema operativo. La documentación para los estados #define (énfasis mío):

Los símbolos se pueden usar para especificar condiciones para la compilación. Puede probar el símbolo con #if o #elif. También puede usar el atributo condicional para realizar una compilación condicional.

Puede definir un símbolo, pero no puede asignar un valor a un símbolo. La directiva #define debe aparecer en el archivo antes de usar las instrucciones que no son también directivas.

También puede definir un símbolo con la opción/define compilador. Puede indefinir un símbolo con #undef.

Un símbolo que defina con/define o con #define no entra en conflicto con una variable del mismo nombre. Es decir, no se debe pasar un nombre de variable a una directiva de preprocesador y un símbolo solo se puede evaluar mediante una directiva de preprocesador .

El alcance de un símbolo creado al usar #define es el archivo en el que se definió.

Tendrá que condicionalmente plazo que en su lugar:

void TestTxF() { 
    if (System.Environment.OSVersion.Version.Major < 6) { 
     // "pass" your test 
    } 
    else { 
     // run it 
    } 
} 

Actualización:

Esto se ha preguntado before.

+0

Gracias Jon, eso es lo que estaba pensando hacer como trabajo temporal. –

0

Simplemente puede administrar los símbolos de depuración usted mismo.

acaba de llegar con un esquema que puede cumplir (Document It!) y luego, cuando compila para una nueva plataforma, simplemente recuerde cambiar las directivas del procesador.

por ejemplo usted podría tener símbolos

LATER_THAN_XP 
LATER_THAN_VISTA 
etc... 

continuación, puede utilizar #ifdef 's para compilar condicionalmente

#ifdef LATER_THAN_XP 

//Run Unit Tests 

#endif 

a continuación, puedes definir estas constantes en las propiedades del proyecto. O si te sientes aventurero, probablemente puedas definir una tarea de MSBuild que exporte los símbolos correctos para definirla en tiempo de compilación, pero eso es un poco más alto que mi nivel de pago.

Cuestiones relacionadas