¿Cómo puedo comstackr condicionalmente mi C # para Mono vs. Microsoft .NET?

Necesito un conmutador de comstackción condicional que sepa si estoy comstackndo para el tiempo de ejecución mono o MS .NET. ¿Cómo puedo hacer esto?

El comstackdor Mono define __MonoCS__

PERO, PERO, PERO , el objective de Mono es que puede tomar un ensamblaje que haya construido con VS y ejecutarlo en Mono, o viceversa.

Me parece que si necesita diferencias entre Mono y MS.NET, entonces debe tomar esas decisiones en tiempo de ejecución.

La forma estándar para detectar Mono en Runtime es:

 bool runningOnMono = Type.GetType ("Mono.Runtime") != null; 

Está claro que hay veces en que el código en una plataforma diferirá en código en otro y es posible que desee hacer esto en tiempo de ejecución o tal vez comstackr el tiempo. Algunas veces no se puede hacer en tiempo de ejecución.

Por ejemplo:

Mono se usa como base de los juegos de herramientas Ios, Android y Mac de Xamarin. Si bien estos tienen muchos códigos comunes, también tienen clases que solo aparecen en una sola plataforma. Al desarrollar con estos kits de herramientas, desarrolla paquetes nativos que no son intercambiables entre plataformas.

Un caso simple es nombres de archivos y rutas. Estos difieren en cada plataforma. Es posible que tenga una pequeña condición para cargar las cadenas de manera diferente en cada plataforma. Algunas plataformas tienen nombres de archivo específicos para cada caso, y otras no.

Sería bueno si hubiera un poco de código que devolviera la plataforma actual, ya sea UNIX, iOS, Mac, X86, X64, Xbox, etc.