Мне нужно сдвоить компиляцию библиотеки классов для Mono на Mac и .NET на ПК. Есть некоторые незначительные изменения, которые я хочу сделать, но я надеялся разделить код с помощью директивы компилятора. Любые предложения?
Директива компилятора #if для разделения между Mono и .NET.
Ответ 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");
}
}