Aunque Visual Studio es muy potente y nos ayuda mucho a la hora de desarrollar aplicaciones .NET, cuando queremos hacer unas cuantas pruebas simples con código C#, usarlo puede llegar a ser un incordio.
Para empezar hay que tenerlo instalado, algo que puede no sea factible en donde nos encontramos, y además hay que lanzar un entorno pesado, crear un proyecto para la prueba, y luego limpiarlo todo. Aunque lo único que queramos probar sean un par de líneas de código, tenemos que tener una estructura mínima de programa, con al menos una clase y un método main...
En estos casos nos vendría de maravilla disponer de un entorno ligero y rápido en el que probar cualquier código sin necesidad de ceremonias previas. La mayor parte de los lenguajes modernos disponen de un REPL (Read-Eval-Print Loop) que podemos lanzar y empezar a escribir instrucciones de prueba inmediatamente. Este tipo de utilidad nos facilita mucho el aprendizaje del lenguaje y también el poder probar códigos cortos de manera rápida. Por ejemplo: REPL de Nodejs y REPL de Swift.
Sin embargo C# no contaba con una facilidad como esta para probar código... hasta que apareció scriptcs.
Este proyecto Open Source instala en tu equipo un intérprete de C# que usa toda la potencia de Roslyn por debajo y que permite lanzar instrucciones en este lenguaje directamente desde la línea de comandos para ir interpretándolas. Además nos deja ejecutar el código que tengamos dentro de archivos con la extensión .csx, interpretándolos y ejecutándolos de inmediato. Dado que no necesita de una estructura previa de clases o métodos, podemos ejecutar simplemente una línea.
Por ejemplo, tras haberlo instalado (con Chocolatey) podemos abrir una línea de comandos y escribir simplemente scriptcs para poder empezar a lanzar instrucciones:
En este ejemplo hemos mostrado la ayuda, y luego hemos escrito un par de instrucciones (recuadradas en rojo) para comprobar su funcionamiento. Finalmente hemos salido usando la instrucción especial :exit.
Del mismo modo podemos escribir código dentro de un archivo .csx (que no es más que un archivo de texto renombrado) y ejecutarlo todo de golpe con el mismo comando, seguido del nombre del archivo:
Por supuesto es posible indicar qué espacios de nombres queremos usar colocando instrucciones using al principio de nuestro "script", y podemos cargar paquetes dentro del script usando NuGet por debajo si lo indicamos mediante el modificado -install. Por ejemplo:
scriptcs -install EntityFramework
que copiaría el paquete NuGet para Entity Framework dentro de la subcarpeta "scriptcs_packages" de la carpeta actual y estaría listo para ser utilizado desde el código que escribamos dentro de ésta.
Lo cierto es que se parece mucho a lo que hacen los programadores de Nodejs con JavaScript y NPM, solo que en este caso el lenguaje es C# y el gestor de paquetes es NuGet.
Es muy interesante.
Puedes encontrar instrucciones más detalladas y todo el código fuente en la página de GitHub para scriptcs. También hay un montón de ejemplos interesantes para investigar en esta otra página: scriptcs-samples.