Frage

Gibt es Präprozessorsymbole, die wie etwas erlauben

#if CLR_AT_LEAST_3.5
// use ReaderWriterLockSlim
#else
// use ReaderWriterLock
#endif

oder eine andere Art und Weise, dies zu tun?

War es hilfreich?

Lösung

Ich glaube nicht, gibt es keine vordefinierten ‚Präprozessor‘ Symbole. Sie können aber erreichen, was Sie so wollen:

  1. Erstellen Sie verschiedene Konfigurationen des Projekts, eine für jede Version von CLR Sie unterstützen möchten.

  2. Wählen Sie ein Symbol wie VERSION2, VERSION3 usw. pro CLR-Version.

  3. In jeder Konfiguration definieren die ein Symbol mit ihr verbundenen und undefine alle anderen.

  4. Verwenden Sie diese Symbole in der bedingten Kompilierung Blöcke.

Andere Tipps

Es gibt jede in nicht gebaut, aber Sie können Ihre eigene liefern.

Für dieses spezifische Szenario, möchten Sie vielleicht die Logik in einzukapseln (zum Beispiel) ein Wrapper (Schloss) Klasse, so dass Sie alle durch den Code nicht #if haben verstreut; natürlich, wenn Sie nur eine wenig Verriegelung tun könnte es nicht wert sein, das Problem.

Ich verwende verschiedene Konfigurationen und / oder Projekte für eine Vielzahl von Plattformen zu bauen - das heißt protobuf- net baut für .NET 2.0, .NET 3.0, Mono, CF 2.0, CF 3.5 mit diesem Trick. Der Code hat Blöcke #if auf verschiedene Symbole basierte Logik zu steuern -. So zum Beispiel BinaryFormatter auf CF nicht verfügbar ist, WCF mit 3.0 .NET nur verfügbar ist, Delegate.CreateDelegate ist nicht auf CF 2.0, etc.

könnten Sie verwenden Reflexion dynamisch zu überprüfen, ob eine bestimmte Art wie ReaderWriterLockSlim verfügbar ist (anstelle der Prä-Prozessor zu verwenden).

Dies würden Sie den Vorteil, dass Sie eine einzelne Version Ihres Produkts und Benutzer (oder die Aktualisierung auf) .NET 3.5 bereitstellen können, werden von dem optimierten Code profitieren.

Sie können dieses Symbol manuell einstellen die / definieren Compiler-Schalter . Dann sind Sie für jede gewünschte clr Version verschiedene Build-Konfigurationen erstellen.

Wenn das alles, was Sie tun musste, ich nehme an, Sie könnte verwenden Environment.Version, aber wie -Lösung divo, scheint es dort eine Menge unnötigen Code zu verlassen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top