Как я могу условно скомпилировать мой C # для Mono vs. Microsoft .NET? - PullRequest
34 голосов
/ 30 ноября 2008

Мне нужен переключатель условной компиляции, который знает, собираюсь ли я для моно или среды выполнения MS .NET. Как я могу это сделать?

Ответы [ 2 ]

58 голосов
/ 30 ноября 2008

Компилятор Mono определяет __MonoCS__

НО, НО, НО , весь смысл Mono заключается в том, что вы можете взять сборку, созданную с помощью VS, и запустить ее на Mono, или наоборот.

Мне кажется, что если вам нужны различия между Mono и MS.NET, вы должны принимать эти решения во время выполнения.

Стандартный способ обнаружения Mono во время выполнения:

bool runningOnMono = Type.GetType ("Mono.Runtime") != null;
1 голос
/ 01 июня 2012

Очевидно, что бывают случаи, когда код на одной платформе будет отличаться от кода на другой, и вы можете сделать это во время выполнения или, возможно, во время компиляции. Иногда это невозможно сделать во время выполнения.

Например:

Mono используется в качестве основы для наборов инструментов Xamarin для Ios, Android и Mac. Хотя они имеют много общего кода, у них также есть классы, которые появляются только на одной платформе. При разработке с помощью этих наборов инструментов вы разрабатываете собственные пакеты, которые не подлежат обмену между платформами.

Простой случай - это имена файлов и пути. Они отличаются на каждой платформе. Я просто хотел бы иметь небольшое условие для загрузки строк по-разному на каждой платформе. У некоторых платформ есть имена файлов для конкретных случаев, а у некоторых нет.

Было бы неплохо, если бы было немного кода, возвращающего текущую платформу - будь то UNIX, iOS, Mac, X86, X64, XBox и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...