Как использовать CSI.аргумент скрипта в EXE

при запуске csi.exe/? (с Visual Studio 2015 update 2 установлен), вы получите следующий синтаксис

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:tempa.csx) имеет только 2 строки следующим образом

using System;
Console.WriteLine("Hello {0} !", <argument_from_commandLine>);

то, что я ожидаю, после запуска следующей командной строки

csi.exe c:tempa.csx David

Я

Hello David !

но я просто не знаю, что мне делать в моем файле сценария, чтобы я мог передать csi.exe [script_argument] в мой файл скрипта (для замены).

заранее спасибо за ваше время и помощь.

2 ответов


в скриптах есть глобальная переменная под названием Args который имеет эти значения "аргумент скрипта". Самое близкое, что я могу найти к документации, - это упоминание об этом в pull запросы на репо roslyn. В csx-файле (тест.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)