Мне нужен условный компилятор, который знает, компилирую ли я для среды выполнения mono или MS.NET. Как я могу это сделать?
Как я могу условно скомпилировать мой С# для Mono и Microsoft.NET?
Ответ 1
Компилятор Mono определяет __MonoCS__
НО, НО, НО, вся точка Mono заключается в том, что вы можете взять сборку, которую вы создали с помощью VS, и запустить ее на Mono или наоборот.
Мне кажется, что если вам нужно иметь различия между Mono и MS.NET, тогда вам нужно принимать эти решения во время выполнения.
Стандартный способ обнаружения Mono при Runtime:
bool runningOnMono = Type.GetType ("Mono.Runtime") != null;
Ответ 2
Понятно, что бывают случаи, когда код на одной платформе будет отличаться от кода на другом, и вы можете захотеть сделать это во время выполнения или, возможно, время компиляции. Иногда это невозможно сделать во время выполнения.
Например:
Моно используется как основа наборов инструментов Xamarin Ios, Android и Mac. Хотя у них много общего кода, у них также есть классы, которые появляются только на одной платформе. При разработке с помощью этих наборов инструментов вы разрабатываете собственные пакеты, которые не заменяются между платформами.
Простым случаем являются имена файлов и пути. Они различаются на каждой платформе. Я просто могу иметь небольшое условие для загрузки строк по-разному на каждой платформе. На некоторых платформах есть конкретные имена файлов, некоторые из которых нет.
Было бы неплохо, если бы был немного кода, который вернул текущую платформу - будь то UNIX, iOS, Mac, X86, X64, XBox и т.д....