Directive du compilateur #if à scinder entre Mono et .NET

J’ai besoin de comstackr deux fois une bibliothèque de classes pour Mono sur Mac et .NET sur PC. Je souhaite apporter quelques modifications mineures, mais j’espérais scinder le code à l’aide d’une directive de compilation. Aucune suggestion?

Eh bien, vous pouvez certainement utiliser

#if MONO 

puis comstackr avec

 gmcs -define:MONO ... 

(Ou mettez-le dans votre configuration de construction Mono, bien sûr. Cela dépend vraiment de la manière dont vous construisez votre bibliothèque.)

… que cherchez-vous au-delà de cela?

Bien qu’une vérification à l’exécution soit probablement préférable, avec le compilateur Mono, la constante __MonoCS__ prédéfinie est utile, par exemple :

 #if __MonoCS__ // Code for Mono C# comstackr. #else // Code for Microsoft C# comstackr. #endif 

La méthode préférée consiste à utiliser la détection d’exécution, car cela permet d’utiliser les mêmes assemblages sur l’une ou l’autre des plateformes:

 using System; class Program { static void Main () { Type t = Type.GetType ("Mono.Runtime"); if (t != null) Console.WriteLine ("You are running with the Mono VM"); else Console.WriteLine ("You are running something else"); } }