Pregunta

¿Hay algún símbolo de preprocesador que permita algo como

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

o alguna otra forma de hacer esto?

¿Fue útil?

Solución

No creo que haya símbolos predefinidos de 'preprocesador'. Sin embargo, puede lograr lo que quiere de esta manera:

  1. Cree diferentes configuraciones de su proyecto, una para cada versión de CLR que desee admitir.

  2. Elija un símbolo como VERSION2 , VERSION3 etc. por versión CLR.

  3. En cada configuración, defina un símbolo asociado con él y defina todos los demás.

  4. Utilice estos símbolos en bloques de compilación condicional.

Otros consejos

No hay ninguno incorporado, pero puedes suministrar el tuyo.

Para este escenario específico, es posible que desee encapsular la lógica en (por ejemplo) una clase de envoltura (bloqueo), para que no tenga #if repartido por todo el código; por supuesto, si solo está haciendo un pequeño bloqueo, puede que no valga la pena.

Utilizo diferentes configuraciones y / o proyectos para compilar para una variedad de plataformas, es decir, protobuf- net construye para .NET 2.0, .NET 3.0, mono, CF 2.0, CF 3.5 usando este truco. El código tiene bloques #if basados ??en diferentes símbolos para controlar la lógica, por lo que, por ejemplo, BinaryFormatter no está disponible en CF, WCF está solo disponible con .NET 3.0, Delegate.CreateDelegate no está en CF 2.0, etc.

Puede utilizar la reflexión para comprobar dinámicamente si un tipo determinado como ReaderWriterLockSlim está disponible (en lugar de usar el preprocesador).

Esto le brindaría la ventaja de que puede implementar una versión única de su producto y los usuarios que tengan (o actualicen) a .NET 3.5 se beneficiarán con el código optimizado.

Puede configurar este símbolo manualmente usando el / define el conmutador del compilador . Luego crea diferentes configuraciones de compilación para cada versión de clr deseada.

Si eso es todo lo que necesitas hacer, supongo que podrías usar Environment.Version, pero como , la solución que depende de on-the-framework-version-in-c # 408923, parece que deja un montón de códigos innecesarios allí.

scroll top