如何使用 CSI.exe 脚本参数

How to use CSI.exe script argument

当你运行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] ...

我只是想知道如何将此 [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] 传递到我的脚本文件(替换 )。

提前感谢您的宝贵时间和帮助。

你可以使用 Environment.GetCommandLineArgs()

您的示例示例:

using System;
Console.WriteLine("Hello {0}!", Environment.GetCommandLineArgs()[2]);

请注意,我正在阅读 third 项,因为 Environment.GetCommandLineArgs() 给出了整个命令行(如果您 运行 使用 csi test.csx David,第一个将是 csi,第二个将是 test.csx)

脚本中有一个名为 Args 的全局变量,它具有这些 "script argument" 值。我能找到的最接近文档的是在 pull requests for the roslyn repo 中提到的。在 csx 文件中 (test.csx):

using System;
Console.WriteLine("Hello {0}!", Args[0]);

使用命令行:

csi.exe test.csx arg1

将给出输出:

Hello arg1!

可以使用 Environment.GetCommandLineArgs() 的替代方法,但问题是这会获取传递给 csi 进程的所有参数。然后你必须将 "script arguments" 与 csi 本身的选项分开。使用内置的 Args 变量可以避免这项工作,该变量也将更易于维护。