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

whi*_*awk 13 .net c# mono

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

Ste*_*art 44

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

#if __MonoCS__
// Code for Mono C# compiler.
#else
// Code for Microsoft C# compiler.
#endif
Run Code Online (Sandbox Code Playgroud)

  • 这是正确的答案,应该这样标记. (7认同)

sko*_*ima 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");
    }
}
Run Code Online (Sandbox Code Playgroud)


Jon*_*eet 14

那么你当然可以使用

#if MONO
Run Code Online (Sandbox Code Playgroud)

然后用.编译

gmcs -define:MONO ...
Run Code Online (Sandbox Code Playgroud)

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

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