Something that will come in handy while porting applications to Mono is the ability to detect whether an application is running under Mono or .NET, and also whether it's running on Unix or Windows. While one would hope that .NET applications would be completely binary portable, there are still some situations where Mono's infancy becomes a stumbling block.
From the Mono Project Technical FAQ:
Having code that depends on the underlying runtime is considered to be bad coding style, but sometimes such code is necessary to work around runtime bugs.
The following methods are documented in the FAQ, but to save everyone time, I'll document them here.
Detecting Mono:
1: using System;
2:
3: class Program {
4: static void Main ()
5: {
6: Type t = Type.GetType ("Mono.Runtime");
7: if (t != null)
8: Console.WriteLine ("You are running with the Mono VM");
9: else
10: Console.WriteLine ("You are running something else");
11: }
12: }
Detecting Linux/Unix:
1: using System;
2:
3: class Program {
4:
5: static void Main ()
6: {
7: int p = (int) Environment.OSVersion.Platform;
8: if ((p == 4) || (p == 128)) {
9: Console.WriteLine ("Running on Unix");
10: } else {
11: Console.WriteLine ("NOT running on Unix");
12: }
13: }
14: }
I apologize for the bad code formatting above, but I'm still fighting to get proper syntax highlighting working with Live Writer and BlogEngine.NET.