Подтвердить что ты не робот

Директива компилятора #if для разделения между Mono и .NET.

Мне нужно сдвоить компиляцию библиотеки классов для Mono на Mac и .NET на ПК. Есть некоторые незначительные изменения, которые я хочу сделать, но я надеялся разделить код с помощью директивы компилятора. Любые предложения?

4b9b3361

Ответ 1

Ну, конечно, вы можете использовать

#if MONO

а затем скомпилируйте с помощью

gmcs -define:MONO ...

(Или, конечно, поместите его в конфигурацию сборки Mono. Это действительно зависит от того, как вы создаете свою библиотеку.)

... что вы ищете дальше?

Ответ 2

В то время как проверка времени выполнения, вероятно, предпочтительнее, с помощью компилятора Mono, определенная константа __MonoCS__ полезна, например:

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

Ответ 3

Предпочтительным способом является использование обнаружения во время выполнения, поскольку это позволяет использовать одни и те же сборки на любой платформе:

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