2012-06-28 42 views
0

可能重复:
How can I conditionally compile my C# for Mono vs. Microsoft .NET?C#确定与单声道编译

我正在写在使用.NET反射C#代码相当积极,包括一些功能还没有Mono提供。最简单的办法,我来处理,这是一个小数目条件句:

#if MONO 
     ... stuff that works on mono .... 
#else 
     ... stuff that works on .NET 4.0 but not (yet) on mono ... 
#endif 

因此,这里是我的问题:是否有任何预定义的标志,我可以测试这种方式,无论是单CSHARP编译器会自动定义,或如果没有,.NET csharp编译器预先定义,我可以测试这种方式?

它需要一个编译时间测试(我知道如何确定在运行时的平台,但是这将是为时已晚)

+0

[如何声明条件编译常量](http://msdn.microsoft.com/en-us/library/3dxx7dta(v = vs.90).aspx) –

+0

Thanks Kevin! FWIW我在发帖之前进行了搜索,但该问题的主题并未提供我使用的关键字。总之,这非常有帮助。 –

回答

1

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

__MonoCS__仅用于编译器解决方法,绝不应用于限制目标平台。

+0

马立克,我绝对同意。作为一个纯粹主义者,你是对的。但问题是,Mono目前不支持一些.NET 4.5特性,我使用这些特性来获取异常,以便在发生故障后正确报告堆栈。当然,我宁愿不要惹恼__MonoCS__,但让我们面对现实吧:如果平台不相同,您可能会遇到这些问题。 –

+0

顺便说一下,有没有一个特定于Android版的Mono C#的版本?事实证明,该平台上还有其他不受支持的选项,所以我实际上也需要特殊情况! –

+0

.NET 4.5功能缺少什么? Mono永远不会与.NET相同,你不是第一个解决这类问题的人,但编译检查肯定不是推荐的方法。 –