编译器#if指令在Mono和.NET之间拆分

我需要在PC上为Mac和.NET双重编译Mono类库。 我想做一些小改动,但我希望使用编译器指令拆分代码。 有什么建议?

那么你当然可以使用

#if MONO 

然后用。编译

 gmcs -define:MONO ... 

(当然,或者把它放在你的Mono构建配置中。这实际上取决于你如何构建你的库。)

…除此之外你还在寻找什么?

虽然运行时检查可能更可取,但使用Mono编译器时,预定义的__MonoCS__常量很有用, 例如

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

首选方法是使用运行时检测,因为这允许在任一平台上使用相同的程序集:

 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"); } }