¿Hay una forma fácil en C # de tener símbolos de comstackción condicionales basados ​​en la versión del sistema operativo?

Tengo un montón de pruebas unitarias que necesitan ser comstackdas condicionales basadas en la versión del sistema operativo Windows. Las pruebas de esta unidad están probando TxF que solo está disponible en Windows Vista y superior.

#if WIN_OS_VERSION >= 6.0 // Run unit tests #endif 

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

Los símbolos se pueden utilizar para especificar condiciones para la comstackción. Puede probar el símbolo con #if o #elif. También puede utilizar el atributo condicional para realizar la comstackció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 instrucciones que no sean también directivas.

También puede definir un símbolo con la opción del comstackdor / define. Puedes desestimar 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, un nombre de variable no debe pasarse a una directiva de preprocesador y un símbolo solo puede evaluarse mediante una directiva de preprocesador.

El scope de un símbolo creado utilizando #define es el archivo en el que se definió.

Tendrás que ejecutarlo condicionalmente en su lugar:

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

Actualizar:

Esto ha sido preguntado antes .

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

simplemente cree un esquema al que pueda atenerse (¡ Documentelo! ) y luego, cuando compile para una nueva plataforma, recuerde cambiar las directivas del procesador.

por ejemplo, podrías tener símbolos

 LATER_THAN_XP LATER_THAN_VISTA etc... 

Luego puedes usar #ifdef ‘s para comstackr condicionalmente

 #ifdef LATER_THAN_XP //Run Unit Tests #endif 

Luego, simplemente puede definir estas constantes en las propiedades de su proyecto. O si se siente aventurero, probablemente podría definir una tarea de MSBuild que exporte los símbolos correctos para definir en el momento de la comstackción, pero eso es un poco por encima de mi grado de pago.