A veces, quieres ejecutar o instalar una aplicación en una nueva máquina o en un servidor que no controlas, y tu aplicación escrita en .NET necesita una versión determinada.
Lo normal que cualquiera se preguntarías ¿dónde se ven las versiones instaladas? Seguro que hay un sitio en el que se muestra esta información o, en el peor de los casos, se puede lanzar algún comando desde la terminal del sistema que nos lo diga ¿verdad? Por ejemplo, con .NET Core es muy sencillo, basta con escribir:
dotnet --version
Y lo obtenemos por pantalla:
Por desgracia, para .NET «clásico» no existe nada similar. Y es un dolor cuando quieres averiguarlo.
La única manera de hacerlo es complicada, implica leer el registro y obtener la versión de manera indirecta, y se gestiona de manera diferente según si es una versión de .NET anterior o posterior a la 4.5. Además hay que averiguar también en el registro si tiene aplicado o no algún «Service Pack». Como digo, un verdadero dolor, explicado por la propia Microsoft.
Pues bueno, para evitar este rollo lo que he hecho ha sido crear un programa de línea de comandos que lo haga automáticamente por nosotros y nos proporcione todas las versiones instaladas actualmente en el sistema. Se trata de DotNetVersions, y lo puedes encontrar en GitHub.
En realidad lo único que he hecho es convertir el código del artículo de Microsoft en un ejecutable que funcione correctamente con versiones antiguas del framework, porque no tiene mucho sentido ejecutarlo si para hacerlo ya necesitas tener al menos .NET 4 ¿no? Debería funcionar con .NET 1, pero como no tengo a mano ningún compilador para una versión tan vieja lo he adaptado y compilado para .NET 2.0 que en realidad está instalado en la práctica totalidad de los sistemas Windows del mundo.
Para ejecutarlo solo hay que llamarlo y te muestra por pantalla todas las versiones de .NET que haya en tu sistema:
Por defecto muestra un encabezado (en inglés) junto a las versiones, y además se detiene hasta que pulses una tecla. Esto facilita el usarlo tan solo haciendo doble-clic sobre él.
Pero si por algún motivo necesitas utilizarlo en un proceso batch (dentro de un .bat
, vamos), puedes ejecutarlo con la opción /b
(sirve también -b
o --b
) y no mostrará el encabezado informativo ni tampoco se detendrá, por lo que tendrás únicamente como salida a la consola las versiones disponibles:
dotnetversions --b
Puedes ver un mini-ayuda usando el modificador -?
(o -help
, y vale con /
o con doble guión --
).
Puedes ver el código fuente en GitHub y descargar un ZIP con el ejecutable listo para utilizar.
¡Espero que te resulte útil!