c# - Cómo usar el argumento de script CSI.exe
scripting (2)
Cuando ejecuta csi.exe /? (con la actualización 2 de Visual Studio 2015 instalada), obtendrá la siguiente sintaxis
Microsoft (R) Visual C# Interactive Compiler version 1.2.0.51106
Copyright (C) Microsoft Corporation. All rights reserved.
Usage: csi [option] ... [script-file.csx] [script-argument] ...
Me pregunto cómo puedo pasar este [ script-argument ] en mi archivo de script csx. Digamos que mi script csx (c: / temp / a.csx) tiene solo 2 líneas de la siguiente manera
using System;
Console.WriteLine("Hello {0} !", <argument_from_commandLine>);
Lo que espero es después de ejecutar la siguiente línea de comando
csi.exe c:/temp/a.csx David
Conseguiré
Hello David !
Pero simplemente no sé qué debería hacer en mi archivo de script para poder pasar csi.exe [ script_argument ] a mi archivo de script (para reemplazar).
Gracias de antemano por su tiempo y ayuda.
Puede usar Environment.GetCommandLineArgs()
para eso.
Ejemplo para tu ejemplo:
using System;
Console.WriteLine("Hello {0}!", Environment.GetCommandLineArgs()[2]);
Observe que estoy leyendo el tercer elemento, porque Environment.GetCommandLineArgs()
da la línea de comando completa (si ejecuta el script usando csi test.csx David
, el primero será csi
y el segundo test.csx
)
Hay una variable global en las secuencias de comandos llamada Args
que tiene estos valores de "argumento de secuencia de comandos". Lo más cercano que puedo encontrar a la documentación es mencionarlo en las solicitudes de extracción para el repo roslyn . En un archivo csx (test.csx):
using System;
Console.WriteLine("Hello {0}!", Args[0]);
usando la línea de comando:
csi.exe test.csx arg1
dará la salida:
Hola arg1!
Se podría hacer que un enfoque alternativo usando Environment.GetCommandLineArgs()
funcione, pero el problema es que esto recoge todos los argumentos pasados al proceso csi. Luego debe separar los "argumentos del script" de las opciones para csi. Este trabajo se puede evitar utilizando la variable Args incorporada, que también será más fácil de mantener.