martes, 17 de marzo de 2020
Hace unos días han anunciado la disponibilidad de una herramienta que os puede interesar si, como un servidor, acumuláis un gran número de versiones del SDK y runtimes de .NET Core que no váis a necesitar, algo muy propio de ese Diógenes digital que todos llevamos dentro ;)
El estado actual de acumulación de SDKs podéis conocerlo muy fácilmente desde línea de comandos utilizando la orden
Algo parecido ocurre con las versiones preinstaladas de los runtimes del framework, que podemos consultar con la orden
Ciertamente, podríamos eliminar gran parte de esta basura acudiendo a la configuración del sistema y desinstalando versión a versión, pero puede ser una labor tediosa si tenéis mucho acumulado.
La nueva herramienta
La herramienta de línea de comandos
Para desinstalar un SDK basta con ejecutar la orden
--runtime o
El estado actual de acumulación de SDKs podéis conocerlo muy fácilmente desde línea de comandos utilizando la orden
dotnet --list-sdks
:C:\>dotnet --list-sdks
1.1.11 [C:\Program Files\dotnet\sdk]
2.1.202 [C:\Program Files\dotnet\sdk]
2.1.503 [C:\Program Files\dotnet\sdk]
2.1.504 [C:\Program Files\dotnet\sdk]
2.1.505 [C:\Program Files\dotnet\sdk]
2.1.507 [C:\Program Files\dotnet\sdk]
2.1.508 [C:\Program Files\dotnet\sdk]
2.1.509 [C:\Program Files\dotnet\sdk]
2.1.511 [C:\Program Files\dotnet\sdk]
2.1.602 [C:\Program Files\dotnet\sdk]
2.1.604 [C:\Program Files\dotnet\sdk]
2.1.700 [C:\Program Files\dotnet\sdk]
2.1.701 [C:\Program Files\dotnet\sdk]
2.1.800-preview-009696 [C:\Program Files\dotnet\sdk]
2.1.801 [C:\Program Files\dotnet\sdk]
2.1.802 [C:\Program Files\dotnet\sdk]
2.2.102 [C:\Program Files\dotnet\sdk]
2.2.105 [C:\Program Files\dotnet\sdk]
2.2.202 [C:\Program Files\dotnet\sdk]
2.2.203 [C:\Program Files\dotnet\sdk]
2.2.204 [C:\Program Files\dotnet\sdk]
3.0.100-preview8-013656 [C:\Program Files\dotnet\sdk]
3.0.100-preview9-014004 [C:\Program Files\dotnet\sdk]
3.0.100 [C:\Program Files\dotnet\sdk]
3.1.100 [C:\Program Files\dotnet\sdk]
3.1.101 [C:\Program Files\dotnet\sdk]
3.1.102 [C:\Program Files\dotnet\sdk]
C:\>_
En mi caso, tengo aún por ahí el SDK de .NET Core 1.x, un par de decenas de .NET Core 2.x, y algunas previews, pero los he visto mucho peores ;) Obviamente, salvo dos o tres versiones que quizás me interesen porque tengo aplicaciones que aún no he migrado, el resto ocupan en mi equipo un espacio considerable sin motivo, más de 5GB, pues cada SDK puede pesar entre 150 y 200 Mb.
Algo parecido ocurre con las versiones preinstaladas de los runtimes del framework, que podemos consultar con la orden
dotnet --list-runtimes
:C:\>dotnet --list-runtimes
Microsoft.AspNetCore.All 2.1.7 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.All]
Microsoft.AspNetCore.All 2.1.8 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.All]
Microsoft.AspNetCore.All 2.1.9 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.All]
Microsoft.AspNetCore.All 2.1.11 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.All]
Microsoft.AspNetCore.All 2.1.12 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.All]
Microsoft.AspNetCore.All 2.1.13 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.All]
Microsoft.AspNetCore.All 2.1.15 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.All]
Microsoft.AspNetCore.All 2.1.16 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.All]
Microsoft.AspNetCore.All 2.2.1 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.All]
Microsoft.AspNetCore.All 2.2.3 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.All]
Microsoft.AspNetCore.All 2.2.4 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.All]
Microsoft.AspNetCore.All 2.2.5 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.All]
Microsoft.AspNetCore.App 2.1.7 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
Microsoft.AspNetCore.App 2.1.8 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
Microsoft.AspNetCore.App 2.1.9 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
Microsoft.AspNetCore.App 2.1.11 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
Microsoft.AspNetCore.App 2.1.12 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
Microsoft.AspNetCore.App 2.1.13 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
Microsoft.AspNetCore.App 2.1.15 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
Microsoft.AspNetCore.App 2.1.16 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
Microsoft.AspNetCore.App 2.2.1 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
Microsoft.AspNetCore.App 2.2.3 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
Microsoft.AspNetCore.App 2.2.4 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
Microsoft.AspNetCore.App 2.2.5 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
Microsoft.AspNetCore.App 3.0.0-preview8.19405.7 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
Microsoft.AspNetCore.App 3.0.0-preview9.19424.4 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
Microsoft.AspNetCore.App 3.0.0 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
Microsoft.AspNetCore.App 3.1.1 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
Microsoft.AspNetCore.App 3.1.2 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
Microsoft.NETCore.App 1.0.13 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
Microsoft.NETCore.App 1.1.10 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
Microsoft.NETCore.App 2.0.9 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
Microsoft.NETCore.App 2.1.7 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
Microsoft.NETCore.App 2.1.8 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
Microsoft.NETCore.App 2.1.9 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
Microsoft.NETCore.App 2.1.11 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
Microsoft.NETCore.App 2.1.12 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
Microsoft.NETCore.App 2.1.13 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
Microsoft.NETCore.App 2.1.15 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
Microsoft.NETCore.App 2.1.16 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
Microsoft.NETCore.App 2.2.1 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
Microsoft.NETCore.App 2.2.3 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
Microsoft.NETCore.App 2.2.4 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
Microsoft.NETCore.App 2.2.5 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
Microsoft.NETCore.App 3.0.0-preview8-28405-07 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
Microsoft.NETCore.App 3.0.0-preview9-19423-09 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
Microsoft.NETCore.App 3.0.0 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
Microsoft.NETCore.App 3.1.1 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
Microsoft.NETCore.App 3.1.2 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
Microsoft.WindowsDesktop.App 3.0.0-preview8-28405-07 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App] Microsoft.WindowsDesktop.App 3.0.0-preview9-19423-09 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App] Microsoft.WindowsDesktop.App 3.0.0 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]
Microsoft.WindowsDesktop.App 3.1.1 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]
Microsoft.WindowsDesktop.App 3.1.2 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]
C:\>_
El espacio ocupado por los runtimes no es tan grande como en el caso de los SDKs, pero aún así, en mi equipo subían de los 1.2Gb.Ciertamente, podríamos eliminar gran parte de esta basura acudiendo a la configuración del sistema y desinstalando versión a versión, pero puede ser una labor tediosa si tenéis mucho acumulado.
La nueva herramienta dotnet-core-uninstall
La herramienta de línea de comandos dotnet-core-uninstall
permite desinstalar estos elementos de forma más sencilla y rápida. Para instalarla, lo primero es acudir al repositorio del proyecto y, en el caso de Windows, descargar el archivo .MSI que encontraréis en la release más reciente; si tenéis un Mac, debéis seguir las instrucciones que aparecen en esa misma página.Ojo: esta herramienta no funciona en Linux :(Tras la correspondiente instalación, ya podremos utilizar la orden desde la consola.
C:\>dotnet-core-uninstall
Required command was not provided.
dotnet-core-uninstall:
Remove specified .NET Core SDKs or Runtimes. This tool can only uninstall items that were installed
using Visual Studio, .NET Core SDK, or Runtime installers. By default, this tool does not
uninstall versions that might be needed for Visual Studio. Read the documentation for the
.NET Core Uninstall Tool at https://aka.ms/dotnet-core-uninstall.
Usage:
dotnet-core-uninstall [options] [command]
Options:
--version Display version information
Commands:
list List .NET Core SDKs or Runtimes that can be removed with this tool.
whatif, dry-run <VERSION> Display .NET Core SDKs and Runtimes that will be removed.
remove <VERSION> Remove the specified .NET Core SDKs or Runtimes.
C:\>_
La misma ayuda ya nos da una idea clara de lo que podemos hacer con esta herramienta. Si probamos con dotnet-core-uninstall list
veremos la lista de SDK, runtimes y hosting bundles que pueden ser desinstaladas:C:\>dotnet-core-uninstall list
This tool can not uninstall versions of the runtime or SDK that are
- SDKs installed using Visual Studio 2019 Update 3 or later.
- SDKs and runtimes installed via zip/scripts.
- Runtimes installed with SDKs (these should be removed by removing that SDK).
The versions that can be uninstalled with this tool are:
.NET Core SDKs:
3.1.102 x64 [Used by Visual Studio. Specify individually or use —-force to remove]
3.0.100 x64
2.2.204 x64 [Used by Visual Studio 2019. Specify individually or use —-force to remove]
2.2.203 x64
2.2.105 x64 [Used by Visual Studio 2017. Specify individually or use —-force to remove]
2.2.102 x64
2.1.802 x64 [Used by Visual Studio 2019. Specify individually or use —-force to remove]
2.1.801 x64
2.1.800-preview-009696 x64
2.1.701 x64
2.1.700 x64
2.1.604 x64
2.1.602 x64
2.1.512 x64 [Used by Visual Studio 2017. Specify individually or use —-force to remove]
2.1.511 x64
2.1.509 x64
2.1.508 x64
2.1.507 x64
2.1.505 x64
2.1.504 x64
2.1.503 x64
2.1.202 x64 [Used by Visual Studio. Specify individually or use —-force to remove]
1.1.11 x64 [Used by Visual Studio. Specify individually or use —-force to remove]
.NET Core Runtimes:
ASP.NET Core Runtimes:
.NET Core Runtime & Hosting Bundles:
C:\>_
En mi caso, podéis ver que no aparecen runtimes ni bundles. Esto es así porque todos ellos fueron instalados con su correspondiente SDK, y no podrían ser desinstalados de forma independiente: al desinstalar el SDK, los runtimes asociados correrán la misma suerte.Para desinstalar un SDK basta con ejecutar la orden
dotnet-core-uninstall remove <VERSION> --sdk
, como por ejemplo:C:\>dotnet-core-uninstall remove 2.1.503 --sdk
The following items will be removed:
Microsoft .NET Core SDK 2.1.503 (x64)
To avoid breaking Visual Studio or other problems, read https://aka.ms/dotnet-core-uninstall.
Do you want to continue? [Y/n] y
Uninstalling: Microsoft .NET Core SDK 2.1.503 (x64).
C:\>_
Si quisiéramos eliminar otro tipo de elementos podríamos indicarlo mediante los flags --hosting-bundle
. Asimismo, el comando soporta un gran número de opciones adicionales para poder realizar algunas de estas operaciones de forma masiva:--all
elimina todo--all-previews
elimina todas las versiones preview--all-previews-but-latest
elimina todas las versiones preview excepto la más reciente--all-but <VERSION>
elimina todo excepto la versión indicada--all-lower-patches
elimina todas las versiones que disponen de un parche superior- Podéis ver muchos otros flags en la documentación de la herramienta, muchos de ellos destinados a eliminar masivamente elementos que ya no necesitemos.
remove
. Es importante utilizarla antes de desinstalar nada para comprobar que estamos haciéndolo correctamente:C:\>dotnet-core-uninstall whatif --all-previews --sdk
*** DRY RUN OUTPUT
Specified versions:
Microsoft .NET Core SDK 2.1.800 - preview (x64)
*** END DRY RUN OUTPUT
C:\>dotnet-core-uninstall whatif --all-but-latest --sdk
*** DRY RUN OUTPUT
Specified versions:
Microsoft .NET Core SDK 3.0.100 (x64)
Microsoft .NET Core SDK 2.2.203 (x64)
Microsoft .NET Core SDK 2.2.102 (x64)
Microsoft .NET Core SDK 2.1.801 (x64)
Microsoft .NET Core SDK 2.1.800 - preview (x64)
Microsoft .NET Core SDK 2.1.701 (x64)
Microsoft .NET Core SDK 2.1.700 (x64)
Microsoft .NET Core SDK 2.1.604 (x64)
Microsoft .NET Core SDK 2.1.602 (x64)
Microsoft .NET Core SDK 2.1.511 (x64)
Microsoft .NET Core SDK 2.1.509 (x64)
Microsoft .NET Core SDK 2.1.508 (x64)
Microsoft .NET Core SDK 2.1.507 (x64)
Microsoft .NET Core SDK 2.1.505 (x64)
Microsoft .NET Core SDK 2.1.504 (x64)
*** END DRY RUN OUTPUT
C:\>_
En la documentación de la herramienta hacen las siguientes advertencias:- Hay que tener en cuenta que podríais eliminar versiones requeridas de forma local por un
global.json
. En este caso, deberíais volver a instalar el SDK desde la página de descargas de .NET Core. - De la misma forma, habría que reinstalar si eliminamos runtimes requeridos por aplicaciones desplegadas en nuestro equipo como framework dependent.
- También podríamos eliminar por error versiones requeridas por Visual Studio; en este caso, deberemos reparar la instalación.
2 Comentarios:
¿Qué nos aporta exactamente esta herramienta frente a desinstalarlas desde el listado de programas de Windows?
https://i.imgur.com/E1wPNzs.png
Hola!
Tiempo :)
Usando esta herramienta puedes hacerlo de forma masiva, sin tener que ir desinstalando una a una. En casos donde hay una acumulación importante, te ahorrará un buen rato.
Saludos!
Enviar un nuevo comentario