【问题标题】:How to use CSI.exe script argument如何使用 CSI.exe 脚本参数
【发布时间】:2016-10-29 20:59:54
【问题描述】:

当你运行 csi.exe /? (安装了 Visual Studio 2015 更新 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] 传递给我的脚本文件(以替换)。

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

【问题讨论】:

  • 请考虑将最佳答案标记为已接受。

标签: c# scripting csi


【解决方案1】:

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

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

使用命令行:

csi.exe test.csx arg1

将给出输出:

你好 arg1!

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

【讨论】:

  • 这正是我想要的。我实际上尝试过这种方法,但不幸的是,我使用了 args[0],即没有大写 Args[0],因此出现错误“当前上下文中不存在名称 'args'”。非常感谢@mike。
  • @jyao:我刚刚对此进行了测试,Args[0] 与@mikez 描述的完全一样。
  • @mikez 酷,看起来很棒!
【解决方案2】:

您可以为此使用Environment.GetCommandLineArgs()

你的例子:

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

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

【讨论】:

  • 感谢@zdimension,它看起来像一个解决方案。
  • 虽然这可能适用于简单的情况,但如果您希望将多个引用或 lib 选项传递给 csi,那么索引将不会是 2(甚至在运行之间保持一致)。正如我在回答中所展示的,有一种更直接的方法可以访问脚本参数。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-13
  • 1970-01-01
  • 1970-01-01
  • 2023-01-30
  • 2017-05-29
  • 1970-01-01
相关资源
最近更新 更多