DEV Community

Baltasar García Perez-Schofield
Baltasar García Perez-Schofield

Posted on • Edited on

dotnet: SDK version not supported

Es imposible tener un proyecto en C# de más de 6 meses, y esperar que, al cabo de ese tiempo, pueda ser clonado y compilado. ¿Por qué? Por la versión del SDK (software development kit).

$ dotnet --version
8.0.110
$ dotnet --list-sdks
7.0.120
8.0.110
Enter fullscreen mode Exit fullscreen mode

Pues eso, que como soy profesor les dejo a los alumnos una plantilla de proyecto con tests, para que tengan facilidades a la hora de completar los ejercicios de los exámenes. Tengo que actualizar esta plantilla cada vez que se inicia, pues Microsoft actualiza C# cada pocos meses... y además lo hace cambiando la versión de SDK, especialmente en su componente mayor, que es la que hace que una dll o un exe puedan ser cargados por la máquina virtual. En este momento, la versión es 9.0.101, es decir, componente mayor 9 y menor 0, parche número 101.

Según la documentación de .NET: "(...) se libera una nueva versión cada noviembre. Cada versión par, como .NET 6 y .NET 8 son LTS (Long-term supported). Las versiones LTS reciben soporte y actualizaciones durante tres años. Las versiones impares son de soporte estándar, obteniendo soporte durante 18 meses.

Este mecanimso de versionado es el mismo que en otro lenguaje de programación, y especialmente, máquina virtual; la que se conoce como JVM (Java Virtual Machine), que sigue el mismo esquema de numeración de versión: <mayor>.<menor>

Pero, en realidad, Oracle y Microsoft son los extremos de un rango sobre cómo utilizar estos mecanismos de versionado. Como los rangos son muy aburridos, mejor pongo a las dos jugando a la cuerda.

Oracle vs Microsoft

Microsoft actualiza el número de versión con frecuencia, lo que obliga a actualizar los proyectos al mismo ritmo; mientras tanto Oracle... no ha cambiado el número mayor de versión... nunca. Inicialmente, no era Oracle el dueño de Java, sino Sun (Standford University Network). Cuando llegó el momento de liberar una segunda versión de Java, en lugar de otorgar el número de versión mayor número 2, lo que hace es asignar este 2 al número de versión menor, mientras el número de versión mayor se mantiene como 1. Así, potencialmente, un programa Java actual que no utilice las nuevas capacidades de Java, debería ser capaz de ser compilado y ejecutado con la primera versión de Java, la 1.1. Incluso, en las mismas circunstancias, podría intentarse ejecutar el jar o class resultante.

Bueno, en realidad, se podría ejecutar un jar compilado con una versión antigua, pero no al contrario, pues además de las versiones del JDK, existen también las versiones de formato de clases (class file version), de forma que se provocaría una UnsupportedClassVersionError.

Así que, al final, ninguno de los dos desarrolladores mantiene un sistema de versionado que realmente refleje la forma de trabajar de los SDK's... Quizás, podemos decir que Microsoft es más honesta, pero ninguno de estos modelos de trabajo no hace la vida de los desarrolladores más sencilla.

Heroku

This site is built on Heroku

Join the ranks of developers at Salesforce, Airbase, DEV, and more who deploy their mission critical applications on Heroku. Sign up today and launch your first app!

Get Started

Top comments (1)

Collapse
 
franciscoortin profile image
Francisco Ortin

Totalmente de acuerdo. Lo de las versiones del código generado es un dolor de muelas. Dicen que ambas infraestructuras son multiplataforma y, curiosamente, no son capaces de funcionar con distintas versiones de la misma :-)

Heroku

This site is built on Heroku

Join the ranks of developers at Salesforce, Airbase, DEV, and more who deploy their mission critical applications on Heroku. Sign up today and launch your first app!

Get Started

👋 Kindness is contagious

Dive into an ocean of knowledge with this thought-provoking post, revered deeply within the supportive DEV Community. Developers of all levels are welcome to join and enhance our collective intelligence.

Saying a simple "thank you" can brighten someone's day. Share your gratitude in the comments below!

On DEV, sharing ideas eases our path and fortifies our community connections. Found this helpful? Sending a quick thanks to the author can be profoundly valued.

Okay