dotnet-script es una herramienta que permite ejecutar scripts de C# directamente desde la línea de comandos de .NET, ampliando las posibilidades de desarrollo con este lenguaje. Este artículo explora tres características avanzadas: el modo multilínea, el procesamiento mediante tuberías (pipeline) y la ejecución remota de scripts, ofreciendo una comprensión profunda de su implementación y aplicación.
Modo multilínea: escritura eficiente de código complejo
Para scripts que requieren lógica extensa, el modo multilínea resulta esancial. dotnet-script permite dividir un script en múltiples bloques de código que pueden ejecutarse de forma independiente o secuencial, facilitando la depuración y prueba incremantal.
El preprocesador encargado de manejar directivas multilínea se encuentra en el archivo Dotnet.Script.Core/Internal/PreprocessorLineRewriter.cs. Este componente reescribe las líneas de código para garantizar que el intérprete las procese correctamente, incluso cuando abarcan varias líneas o contienen estructuras complejas.
// Ejemplo de uso en un script multilínea
var numbers = new[] { 1, 2, 3, 4, 5 };
var squared = numbers.Select(n => n * n);
foreach (var s in squared)
{
Console.WriteLine($"Cuadrado: {s}");
}
Procesamiento con tuberías: flujo de datos entre comandos
La funcionalidad de pipeline permite conectar la salida de un comando como entrada de otro, facilitando transformaciones encadenadas de datos. dotnet-script puede leer desde la entrada estándar y escribir en la salida estándar, integrándose con otras herramientas de línea de comandos.
En el archivo Dotnet.Script.Core/Commands/ExecuteScriptCommand.cs se encuentra la lógica que maneja el flujo de datos. La implementación utiliza flujos (streams) para transportar información entre procesos, sin necesidad de archivos temporales.
// Fragmento conceptual del manejo de tuberías
using (var inputStream = Console.OpenStandardInput())
using (var outputStream = Console.OpenStandardOutput())
{
var buffer = new byte[1024];
int bytesRead;
while ((bytesRead = inputStream.Read(buffer, 0, buffer.Length)) > 0)
{
// Procesar datos y escribir en la salida
outputStream.Write(buffer, 0, bytesRead);
}
}
Ejecución remota de scripts: más allá del entorno local
dotnet-script permite ejecutar scripts almacenados en servidores remotos sin descargarlos manualmente. La herramienta obtiene el contenido del script a través de HTTP u otros protocolos y lo ejecuta en el entorno local.
La descarga remota se gestiona en Dotnet.Script.Core/Commands/ExecuteScriptCommand.cs, donde se instancia un descargador de scripts. Además, en Dotnet.Script.Extras/RemoteFileResolver.cs se definen las estrategias para resolver y autenticar el acceso a archivos remotos.
// Ejemplo de descarga de un script remoto
var fetcher = new RemoteScriptFetcher();
string scriptCode = await fetcher.FetchAsync("https://example.com/scripts/mi-script.csx");
// Luego se evalúa el código descargado
Estas tres capacidades —modo multilínea, caanlización y ejecución remota— convierten a dotnet-script en una herramienta versátil para automatización, prototipado rápido y procesamiento de datos. Conocer su implementación permite aprovechar al máximo el ecosistema .NET.