2012-06-28 93 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相同,你不是第一個解決這類問題的人,但編譯檢查肯定不是推薦的方法。 –