如何有条件地编译我的C#for Mono vs. Microsoft .NET?

时间:2008-11-30 16:37:04

标签: c# .net mono

我需要一个条件编译开关,它知道我是在编译单声道还是MS .NET运行时。我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:57)

Mono编译器定义__MonoCS__

但是,但是,Mono的全部意义在于,您可以使用VS构建的程序集并在Mono上运行,反之亦然。

在我看来,如果你需要Mono vs MS.NET的差异,那么你需要在运行时做出这些决定。

在运行时检测Mono的标准方法是:

bool runningOnMono = Type.GetType ("Mono.Runtime") != null;

答案 1 :(得分:1)

很明显,有时某个平台上的代码与另一个平台上的代码不同,您可能希望在运行时或编译时执行此操作。有时它无法在运行时完成。

例如:

Mono被用作Xamarin的Ios,Android和Mac工具包的基础。虽然这些代码有很多共同的代码,但它们也有只出现在单个平台上的类。使用这些工具包进行开发时,您可以开发在平台之间无法交换的本机包。

一个简单的例子是文件名和路径。这些在每个平台上都不同。我可能有一点条件在每个平台上加载不同的字符串。有些平台有特定于案例的文件名,有些则没有。

如果有一些代码返回当前平台会很好 - 无论是UNIX,iOS,Mac,X86,X64,XBox等......