我需要一个条件编译开关,能够知道我是为Mono还是MS .NET运行时编译。我该怎么做?
Mono编译器定义了__MonoCS__
但是,但是,但是,Mono的整个重点在于可以使用在VS中构建的程序集在Mono上运行,反之亦然。
我认为,如果你需要区分Mono和MS.NET的差异,那么你需要在运行时做出这些决策。
检测Mono的标准方式是在运行时进行:
bool runningOnMono = Type.GetType ("Mono.Runtime") != null;
很明显,有时候一个平台上的代码会与另一个平台上的代码不同,您可能希望在运行时或编译时执行此操作。有时无法在运行时完成。
例如:
Mono被用作Xamarin的Ios、Android和Mac工具包的基础。虽然它们有很多共同的代码,但也有一些只出现在单个平台上的类。使用这些工具包进行开发时,您会开发本地软件包,这些软件包不能在平台之间交换。
一个简单的例子是文件名和路径。这些在每个平台上都不同。我可能需要一个小条件来在每个平台上以不同的方式加载字符串。有些平台有特定于大小写的文件名,而有些则没有。
如果有一小段代码可以返回当前平台——无论是UNIX、iOS、Mac、X86、X64还是XBox等,那就太好了。
System.IO.Path.DirectorySeparatorChar
。因此,无需构建自己的逻辑来处理该情况的不同操作系统可能性。 - Nate C-K
AppDomain.CurrentDomain.FirstChanceException
在Mono上就没有定义。 - Sergiy Belozorov