¿Cómo debo escribir código con secciones únicas para diferentes versiones de .NET?

StackOverflow https://stackoverflow.com/questions/85773

  •  01-07-2019
  •  | 
  •  

Pregunta

Mi código fuente debe ser compatible con .NET versión 1.1 y 2.0...¿Cómo pruebo las diferentes versiones y cuál es la mejor manera de afrontar esta situación?

Me pregunto si debería tener las dos secciones de código en línea, en clases, métodos, etc. separados.¿Qué opinas?

¿Fue útil?

Solución

Si desea hacer algo como esto, necesitará utilizar comandos de preprocesador y símbolos de compilación condicional.

Yo usaría símbolos que indiquen claramente la versión de .NET a la que se dirige (digamos NET11 y NET20) y luego ajustaría el código relevante de esta manera:

#if NET11
// .NET 1.1 code
#elif NET20
// .NET 2.0 code
#endif

La razón para hacerlo de esta manera en lugar de un simple if/else es una capa adicional de protección en caso de que alguien olvide definir el símbolo.

Dicho esto, realmente deberías profundizar en el corazón de la razón por la que quieres o necesitas hacer esto.

Otros consejos

Hay muchas opciones diferentes aquí.Donde trabajo usamos #if pragmas pero también se podría hacer con ensamblajes separados para las versiones separadas.

Lo ideal sería al menos mantener el código dependiente de la versión en archivos de clase parciales separados y hacer que la versión correcta esté disponible en el momento de la compilación.Aplicaría esto si pudiera retroceder en el tiempo, nuestra base de código ahora tiene una gran cantidad de pragmas #if y, a veces, puede ser difícil de administrar.La peor parte de todo el asunto #if pragma es que Visual Studio simplemente ignora todo lo que no se compila con las definiciones actuales, por lo que es muy fácil verificar los cambios importantes.

Unidad N admite tanto 1.1 como 2.0, por lo que es una buena opción para un marco de prueba.No es demasiado difícil usar algo como hormiga para realizar compilaciones 1.1 y 2.0 separadas y luego ejecutar automáticamente las pruebas de NUnit.

Me preguntaría POR QUÉ hay que mantener dos bases de código, elegiría una y la seguiría si hubiera alguna posibilidad.

Intentar mantener dos bases de código sincronizadas con la cantidad de cambios y los tipos de cambios sería muy complejo, y un proceso de compilación para cualquiera de las versiones sería muy complejo.

Tuvimos este problema y terminamos con una "capa de compatibilidad" donde implementamos un único conjunto de interfaces y código de utilidad para .NET v1.1 y v2.0.

Luego, nuestro instalador estableció el código correcto para la versión correcta.Nosotros usamos NSIS (¡gratis!) y tienen funciones a las que puede llamar para determinar la versión de .NET.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top