Мне нужен переключатель условной компиляции, который знает, компилирую ли я для среды выполнения mono или MS .NET. Как я могу это сделать?
Как я могу условно скомпилировать свой С# для Mono по сравнению с Microsoft .NET?
Ответы (2)
Компилятор Mono определяет __MonoCS__
НО, НО, НО, весь смысл Mono в том, что вы можете взять сборку, созданную с помощью VS, и запустить ее в Mono или наоборот.
Мне кажется, что если вам нужны различия между Mono и MS.NET, вам нужно принимать эти решения во время выполнения.
Стандартный способ обнаружения Mono во время выполнения:
bool runningOnMono = Type.GetType ("Mono.Runtime") != null;
System.Deployment
, в противном случае вам придется условно скомпилировать.
- person Chris Pfohl; 28.09.2012
AppDomain.CurrentDomain.FirstChanceException
просто не определено в Mono.
- person Sergiy Belozorov; 24.03.2014
using System.Deployment.Application;
— это не может работать во время выполнения, потому что оператор using не компилируется в Mono. С переключателем компиляции я могу это сделать.
- person PandaWood; 06.08.2018
Понятно, что бывают случаи, когда код на одной платформе будет отличаться от кода на другой, и вы можете захотеть сделать это во время выполнения или, возможно, во время компиляции. Иногда это невозможно сделать во время выполнения.
Например:
Mono используется в качестве основы для наборов инструментов Xamarin для iOS, Android и Mac. Хотя у них много общего кода, у них также есть классы, которые появляются только на одной платформе. При разработке с помощью этих наборов инструментов вы разрабатываете собственные пакеты, которые нельзя обменивать между платформами.
Простой случай — имена файлов и пути. Они различаются на каждой платформе. Я просто мог бы иметь небольшое условие для загрузки строк по-разному на каждой платформе. На некоторых платформах есть имена файлов для конкретных случаев, а на некоторых нет.
Было бы неплохо, если бы был небольшой код, возвращающий текущую платформу - будь то UNIX, iOS, Mac, X86, X64, XBox и т.д....
System.IO.Path.DirectorySeparatorChar
, например. Таким образом, нет необходимости создавать собственную логику для обработки различных возможностей ОС в этом случае.
- person Nate C-K; 23.01.2015