2010-05-13 12 views

Antwort

4

Ich glaube nicht, gibt es eine Möglichkeit bedingt, um Code zu kompilieren, basierend auf OS-Version. Die Dokumentation für #define states (Hervorhebung von mir):

Symbole können verwendet werden, um Bedingungen für die Kompilierung anzugeben. Sie können auf das Symbol mit #if oder #elif testen. Sie können das bedingte Attribut auch zum bedingten Kompilieren verwenden.

Sie können ein Symbol definieren, aber Sie können einem Symbol keinen Wert zuweisen. Die Direktive #define muss in der Datei enthalten sein, bevor Sie Anweisungen verwenden, die nicht auch Richtlinien sind.

Sie können auch ein Symbol mit der Compileroption/define definieren. Sie können ein Symbol mit #undef undefiniert.

Ein Symbol, das Sie mit/define oder mit #define definieren, steht nicht in Konflikt mit einer Variablen mit demselben Namen. Das heißt, ein Variablenname sollte nicht an eine Präprozessordirektive übergeben werden und ein Symbol kann nur durch eine Präprozessordirektive ausgewertet werden.

Der Bereich eines Symbols, das mit #define erstellt wird, ist die Datei, in der es definiert wurde.

Sie müssen bedingt laufen es statt:

void TestTxF() { 
    if (System.Environment.OSVersion.Version.Major < 6) { 
     // "pass" your test 
    } 
    else { 
     // run it 
    } 
} 

Update:

Diese before gefragt wurde.

+0

Dank Jon, das war, was ich dachte, als eine Arbeit zu tun. –

0

Sie können die Debug-Symbole einfach selbst verwalten.

kommen nur mit einem Schema, die Sie kleben können (es Dokument!) und dann beim Kompilieren für eine neue Plattform nur die Prozessor-Richtlinien ändern erinnern.

zum Beispiel könnten Sie Symbole

LATER_THAN_XP 
LATER_THAN_VISTA 
etc... 

Dann können Sie #ifdef ‚s verwenden, um bedingt zu kompilieren

#ifdef LATER_THAN_XP 

//Run Unit Tests 

#endif 

Dann können Sie einfach diese Konstanten in Ihrem Projekteigenschaften definieren. Oder, wenn Sie sich abenteuerlustig fühlen, könnten Sie wahrscheinlich eine MSBuild-Aufgabe definieren, die das korrekte Symbol (die richtigen Symbole) exportiert, um es zur Kompilierungszeit zu definieren, aber das ist ein bisschen über meiner Gehaltsstufe.