编译器#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"); } }