2016-06-27 21 views
9

csi.exe /?を実行すると、 (Visual Studioの2015インストールされた更新プログラム2で)、私はちょうど私が私のCSXスクリプトファイルにこの[スクリプト引数]を渡すことができるか疑問に思って、次の構文CSI.exeスクリプト引数の使用方法

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スクリプト(C:\ tempに\ a.csx)は

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

を次のように私は何を期待のみ2ラインを持っている私は、次のコマンドライン

csi.exe c:\temp\a.csx David 

を実行した後に、私が得るあります

Hello David ! 

しかし、私はちょうど私がcsi.exeを渡すことができますので、私は私のスクリプトファイルに何をすべきか分からない私のスクリプトファイルへの[script_argument](交換します)。

あなたの時間と助力に感謝します。

+0

トップの回答を受け入れることを検討してください。 – binki

答えて

11

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変数を使用することで回避できます。

+0

これは私が欲しいものです。私は実際にこのメソッドを試しましたが、残念ながらargs [0]、つまり大文字のArgs [0]を使用しなかったため、 "現在のコンテキストにname 'args'が存在しません。 @mikeをありがとう。 – jyao

+0

@jyao:私はちょうどこれをテストして、 'Args [0]'は@mikezが説明しているとおりに動作します。 –

+0

@binki私の更新を参照してください –

0

これにはEnvironment.GetCommandLineArgs()を使用できます。あなたの例のための

例:Environment.GetCommandLineArgs()は、コマンドライン全体を与えるので、私は(、第三の項目を読んでいる

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

お知らせおcsi test.csx Davidを使用してスクリプトを実行した場合、最初の1はcsiになります第2のものtest.csx

+0

ありがとう@zdimension、それは解決策のように見えます。 – jyao

+1

これは単純なケースではうまくいくかもしれませんが、csiに複数の参照またはlibオプションを渡すことを期待している場合、インデックスは2ではありません(または実行間でも一貫しています)。私の答えに示されているように、スクリプト引数にアクセスするより直接的な方法があります。 –

関連する問題