Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用CSI.exe脚本参数_C#_Scripting_Csi - Fatal编程技术网

C# 如何使用CSI.exe脚本参数

C# 如何使用CSI.exe脚本参数,c#,scripting,csi,C#,Scripting,Csi,当您运行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] ... 我只是想知道

当您运行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:\temp\a.csx)只有两行,如下所示

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

Hello David !
但是我不知道我应该在脚本文件中做什么,这样我就可以将csi.exe[script\u参数]传递给脚本文件(替换)


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

您可以使用
Environment.GetCommandLineArgs()

举个例子:

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

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

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

使用命令行:

csi.exe test.csx arg1
将给出输出:

你好,arg1


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

感谢@zdimension,它看起来是一个解决方案。虽然这可能适用于简单的情况,但如果您希望将多个引用或库选项传递给csi,那么索引将不会是2(甚至在运行之间不一致)。有一种更直接的方法可以访问脚本参数,正如我在回答中所示。这正是我想要的。实际上我尝试过这种方法,但不幸的是,我使用了args[0],即没有大写的args[0],因此出现了错误“名称“args”在当前上下文中不存在”。非常感谢@mike@jyao:我刚刚测试过这个,而且
Args[0]
的工作方式和@mikez描述的完全一样。@mikez很酷,看起来很棒!请考虑将上面的答案标记为已接受。
using System;
Console.WriteLine("Hello {0}!", Args[0]);
csi.exe test.csx arg1