Muchas de las empresas en las que trabajamos tienen aplicaciones en la línea de comandos, ya sea para acceder a ciertos servicios, o para realizar ciertas acciones de la empresa
Aquí, vamos a ver como crear dichas aplicaciones en .NET de una forma muy sencilla y sin dependencias extra.
Índice
1- Qué es la línea de comandos (CLI) y porqué deberías usarla?
Una CLI o línea de comandos es una interfaz para interactuar con tu sistema mediante texto a través de la terminal, ya sea la terminal CMD, la de powershell en windows o Iterm en mac o la cualquiera de las 200 que tengas instalada en linux, lo importante es que es una interfaz de texto, sin botones o menús desplegables.
La idea de todas CLI es que ejecutas programas y scripts escribiendo comandos que el sistema es capaz de ejecutar.
Entiendo que toda persona que está leyendo esto ha interactuado con una CLI, pero así es como funciona git o docker por ejemplo, que aunque en ambas podemos utilizar interfaces gráficas, la velocidad o la posibilidad de automatización para ejecutar múltiples comandos en scripts hace que sus CLIs sean muy populares en el entorno escritorio, no solo en servidores.
2 - Crear una aplicación de CLI en .NET
Dentro del ecosistema de .NET tenemos una forma muy fácil y muy sencilla de crear aplicaciones de línea de comandos e instalarlas en nuestra máquina o en cualquier otra.
Para ello necesitamos dos cosas:
-
La CLI de .NET, la cual la tienes instalada si tienes .NET en tu máquina
-
La aplicación que quieres convertir en una CLI, en nuestro caso, vamos a utilizar la aplicación que vimos en el post “Crea interfaces de usuario intuitivas en la consola con Spectre” (https://www.netmentor.es/entrada/cli-interfaces-spectre-console)
Con esto, ya lo tienes casi todo, ya que el proceso es muy sencillo:
Primero debemos modificar el fichero .csproj para añadir tres propiedades dentro del property group
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<PackAsTool>true</PackAsTool> 👈
<ToolCommandName>netmentor-deploy</ToolCommandName>👈
<PackageOutputPath>./nupkg</PackageOutputPath>👈
</PropertyGroup>
Estas 3 propiedades significan lo siguiente:
-
PackAsTool: Permite empaquetar el proyecto como una herramienta
-
ToolCommandName: Indicamos el comando de la línea de comandos que queremos que invoque nuestro código.
-
PackageOutputPath: cuando empquetamos el proyecto se crea un paquete nuget, ese paquete es el que se instala en tu máquina.
Lo que significa, que en la empresa podemos tener nuestros paquetes de la línea de comandos como paquetes nuget e instalarlos de una forma muy sencilla.
Para ello, lo primero es empaquetar dicho código con el siguiente comando:
dotnet pack
Este comando nos genera un paquete nuget en la carpeta indicada, y podríamos subirlo a nuget e instalar desde nuget, pero para simplificar lo instalaremos desde local.
Únicamente debemos ejecutar este comando:
dotnet tool install --global --add-source .\nupkg\ PopularLibraries.SpectreExample
//respuesta
You can invoke the tool using the following command: netmentor-deploy
Tool 'popularlibraries.spectreexample' (version '1.0.0') was successfully installed.
Si estuvieras instalando desde nuget no necesitarías indicar la propiedad de la ruta.
En cualquier caso, el programa lo tenemos instalado en local como una CLI y ahora únicamente lo tenemos que ejecutar con el comando que hemos indicado en ToolCommandName:
Y vemos cómo se ejecuta correctamente.
Por supuesto para eliminar la CLI simplemente corremos el comando uninstall:
dotnet tool uninstall --global PopularLibraries.SpectreExample
//respuesta
Tool 'popularlibraries.spectreexample' (version '1.0.0') was successfully uninstalled.
3 - Necesito una CLI
Saber si necesitas una CLI es un tema algo más complicado ya que depende del trabajo que quieras hacer y cómo.
En muchas empresas el uso de una CLI interna es muy común,sus funcionalidades pueden variar,desde ser utilizada para acceder a los logs de kubernetes, o para acciones más complejas como recibir un usuario temporal que te permita conectarte a una base de datos, todo depende de lo que quieras y necesites hacer, el mundo de la empresa es muy particular en cada caso.
En el caso de un desarrollador de los que hoy en dia se les llama indie hacker pueden tener una CLI para desplegar cada una de sus aplicaciones o web, donde puedes tener en la ruta del proyecto cierta información clave, que sea independiente en cada proyecto, ejecutas tu CLI y despliegas de forma automática.
Vas a decir que eso no tiene CI/CD, etc, pero es la forma más rápida con diferencia cuando trabajas solo