2012-02-03 4 views
12

Próbuję uzyskać aplikację C# działającą pod OSX, która nie jest dokładnie bezbolesna. Aby obejść niektóre problemy na krótką metę, myślę o ustanowieniu pewnych konkretnych reguł, gdy jest uruchomiony w systemie OSX.C# skompilowany w mono - Detect OS

Ale ... Czego mogę użyć do określenia, czy aplikacja działa pod kontrolą systemu Windows lub OSX?

+0

muszę upewnić się zrozumieć, co następuje. Rozumiesz, jeśli używasz Mono, twoja aplikacja będzie działać tylko w systemie operacyjnym z zainstalowanym Mono, w tym Windows. –

+0

@Ramhound: Naprawdę? Myślałem, że wynik CIL wygenerowany przez Mono jest taki sam jak MS.net2.0. Możesz mnie poprawić, jeśli się mylę. Wiem niewiele o Mono. – spender

+0

@spender - Podczas tworzenia dla środowiska wykonawczego Mono istnieją pewne zastrzeżenia. Większość ma jednak obejścia. Dostępny jest również analizator migracji do migracji projektów .NET: http://www.mono-project.com/MoMA. Niech żyje Mono. – ken

Odpowiedz

17

Z Mono wiki (w moim doświadczeniu, jest identyfikowany jako OSX Unix):

int p = (int) Environment.OSVersion.Platform; 
if ((p == 4) || (p == 128)) { 
     Console.WriteLine ("Running on Unix"); 
} else { 
     Console.WriteLine ("NOT running on Unix"); 
} 

Albo

string msg1 = "This is a Windows operating system."; 
string msg2 = "This is a Unix operating system."; 
string msg3 = "ERROR: This platform identifier is invalid."; 

OperatingSystem os = Environment.OSVersion; 
PlatformID  pid = os.Platform; 
switch (pid) 
{ 
    case PlatformID.Win32NT: 
    case PlatformID.Win32S: 
    case PlatformID.Win32Windows: 
    case PlatformID.WinCE: 
     Console.WriteLine(msg1); 
     break; 
    case PlatformID.Unix: 
     Console.WriteLine(msg2); 
     break; 
    default: 
     Console.WriteLine(msg3); 
     break; 
} 
+0

Idealny! Dzięki. Przyjmę, gdy tylko będę mógł. – BlueVoodoo

+1

To nadal nie powie różnicy między Linux i OSX. – IanNorton

+4

W rzeczywistości nowszy mono ma [OSX w wyliczaniu platform] (http://docs.go-mono.com/index.aspx?link=T%3ASystem.PlatformID). Tak więc w zależności od wersji mono otrzymasz Unixa lub MacOSXa – IanNorton