C#确定是否使用mono编译

C#确定是否使用mono编译,c#,.net-4.0,mono,C#,.net 4.0,Mono,可能重复: 我正在用C#编写代码,它相当积极地使用.NET反射,包括Mono中尚未提供的一些功能。我处理这一问题的简单方法是使用少量条件: #if MONO ... stuff that works on mono .... #else ... stuff that works on .NET 4.0 but not (yet) on mono ... #endif 因此,我的问题是:是否有任何预定义的标志可以通过这种方式进行测试,Mono csharp

可能重复:

我正在用C#编写代码,它相当积极地使用.NET反射,包括Mono中尚未提供的一些功能。我处理这一问题的简单方法是使用少量条件:

 #if MONO
        ... stuff that works on mono ....
 #else
        ... stuff that works on .NET 4.0 but not (yet) on mono ...
 #endif
因此,我的问题是:是否有任何预定义的标志可以通过这种方式进行测试,Mono csharp编译器会自动定义,或者如果没有,则是.NET csharp编译器预定义的,我可以通过这种方式进行测试


它需要一个编译时测试(我知道如何在运行时确定平台,但那太晚了)

最好在运行时确定平台。使用Mono的C#编译器编译程序并在.NET上运行(甚至可以直接在.NET运行时上运行Mono的C#编译器)并不少见


\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu!我在发帖前搜索了FWIW,但那个问题的主题没有找到我使用的关键词。无论如何,这很有帮助。马瑞克,我绝对同意。作为一个纯粹主义者,你是对的。但问题是Mono目前不支持.NET4.5的一些功能,我使用这些功能来获取异常,以便在发生故障后正确报告堆栈。当然,我不想搞乱Monos,但让我们面对现实:如果平台不一样,你可能会遇到这些问题。顺便问一下,有专门针对Mono C#for Android的版本吗?事实证明,在那个平台上还有其他不受支持的选项,所以我实际上也需要特别考虑那个选项!您缺少什么.NET4.5功能?Mono永远不会与.NET完全相同,您也不是第一个解决此类问题的人,但编译检查绝对不是推荐的方法。