Как использовать аргумент скрипта CSI.exe
Когда вы запускаете csi.exe /? (с установленным обновлением 2 для Visual Studio 2015) вы получите следующий синтаксис
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] ...
Мне просто интересно, как я могу передать этот [аргумент сценария] в мой файл сценария csx. Допустим, мой csx-скрипт (c:\temp\a.csx) имеет только 2 строки следующим образом
using System;
Console.WriteLine("Hello {0} !", <argument_from_commandLine>);
Я ожидаю, что после запуска следующей командной строки
csi.exe c:\temp\a.csx David
я получу
Hello David !
Но я просто не знаю, что мне делать в моем файле сценария, чтобы я мог передать файл csi.exe [script_argument] в мой файл сценария (для замены).
Заранее спасибо за ваше время и помощь.
2 ответа
В скриптах есть глобальная переменная Args
который имеет эти значения "аргумента сценария". Самая близкая вещь, которую я могу найти к документации, - упоминание об этом в запросах на извлечение для репозитория Roslyn. В файле csx (test.csx):
using System;
Console.WriteLine("Hello {0}!", Args[0]);
используя командную строку:
csi.exe test.csx arg1
выдаст вывод:
Привет arg1!
Альтернативный подход с использованием Environment.GetCommandLineArgs()
можно заставить работать, но проблема в том, что он собирает все аргументы, передаваемые процессу csi. Затем вы должны отделить "аргументы скрипта" от параметров самого csi. Этой работы можно избежать, используя встроенную переменную Args, которая также будет более удобной для сопровождения.
Ты можешь использовать Environment.GetCommandLineArgs()
для этого.
Пример для вашего примера:
using System;
Console.WriteLine("Hello {0}!", Environment.GetCommandLineArgs()[2]);
Обратите внимание, что я читаю третий пункт, потому что Environment.GetCommandLineArgs()
дает всю командную строку (если вы запускаете скрипт с помощью csi test.csx David
первый будет csi
и второй test.csx
)