Как получить доступ к аргументам командной строки в скрипте.csx?

Я использую csi.exe Интерактивный компилятор C# для запуска .csx скрипт. Как я могу получить доступ к любым аргументам командной строки, предоставленным моему сценарию?

csi script.csx 2000

Если вы не знакомы с csi.exe, вот сообщение об использовании:

>csi /?
Microsoft (R) Visual C# Interactive Compiler version 1.3.1.60616
Copyright (C) Microsoft Corporation. All rights reserved.

Usage: csi [option] ... [script-file.csx] [script-argument] ...

Executes script-file.csx if specified, otherwise launches an interactive REPL (Read Eval Print Loop).

2 ответа

Решение

Environment.GetCommandLineArgs() возвращается ["csi", "script.csx", "2000"] для этого примера.

CSI имеет Args глобальный, который разбирает аргументы для вас. В большинстве случаев это даст вам аргументы, которые вы хотели, как если бы вы обращались argv в программе на C/C++ или args в C# Main() подпись static void Main(string[] args),

Args имеет тип IList<string> скорее, чем string[], Так что вы будете использовать .Count найти количество аргументов вместо .Length,

Вот пример использования:

#!/usr/bin/env csi
Console.WriteLine($"There are {Args.Count} args: {string.Join(", ", Args.Select(arg => $"“{arg}”"))}");

И некоторые примеры вызовов:

ohnob@DESKTOP-RC0QNSG MSYS ~/AppData/Local/Temp
$ ./blah.csx
There are 0 args:

ohnob@DESKTOP-RC0QNSG MSYS ~/AppData/Local/Temp
$ ./blah.csx hi, these are args.
There are 4 args: “hi,”, “these”, “are”, “args.”

ohnob@DESKTOP-RC0QNSG MSYS ~/AppData/Local/Temp
$ ./blah.csx 'hi, this is one arg.'
There are 1 args: “hi, this is one arg.”

Вот мой сценарий:

    var t = Environment.GetCommandLineArgs();
    foreach (var i in t)
        Console.WriteLine(i);

Чтобы передать аргументы в csx:

    scriptcs hello.csx -- arg1 arg2 argx

Распечатывает:

    hello.csx
    --
    arg1
    arg2
    argx

Ключ - "-" между аргументами csx и script.

Другие вопросы по тегам