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

时间:2010-12-10 06:14:17

标签: c# .net mono

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

3 个答案:

答案 0 :(得分:44)

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

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

答案 1 :(得分:19)

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

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

答案 2 :(得分:14)

你当然可以使用

#if MONO

然后用

编译
gmcs -define:MONO ...

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

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