2016-06-27 5 views
9

csi.exe /?를 실행할 때? (비주얼 스튜디오 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] ... 

을 얻을 것이다. 내가 기대하는 것은 내가

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

내가 얻을 것이다 다음 명령 줄을 실행 한 후입니다

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

다음과 같이 단지 2 라인을 가지고 : (\ 임시 \의 a.csx는 C가)의 말을 내 CSX 스크립트를 보자

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]); 

는 명령 줄을 사용하여 :

안녕하세요 ARG1 :

csi.exe test.csx arg1 

출력을 줄 것이다!

Environment.GetCommandLineArgs()을 사용하는 다른 방법을 사용할 수는 있지만 문제는 이것이 csi 프로세스에 전달 된 모든 인수를 선택한다는 것입니다. 그런 다음 "스크립트 인수"와 csi 자체의 옵션을 구분해야합니다. 이 작업은 더 유지하기 쉬운 Args 변수를 사용하여 피할 수 있습니다.

+0

이것은 내가 원하는 것입니다. 실제로이 방법을 시도했지만 불행히도 args [0]을 사용했기 때문에 Args [0]이 대문자가 아니기 때문에 "현재 args에 '존재하지 않습니다.'라는 오류가 나타납니다. @mike. 고마워. – jyao

+0

@jyao : 나는 이것을 테스트했으며 Args [0]은 @mikez가 설명하는 것과 똑같이 작동합니다. –

+0

@binki 내 업데이트를 참조하십시오. –

0

Environment.GetCommandLineArgs()을 사용할 수 있습니다. 귀하의 예를 들어

예 : 나는 세 번째 항목을 읽고 있어요

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

공지 사항, 당신은 csi test.csx David을 사용하여 스크립트를 실행하는 경우 Environment.GetCommandLineArgs()이 (전체 명령 행을 제공하기 때문에, 첫 번째는 csi 될 것입니다 두 번째 매개 변수 test.csx)

+0

@zdimension에 감사드립니다. 솔루션처럼 보입니다. – jyao

+1

이것은 단순한 경우에 효과적 일 수 있지만 csi에 여러 개의 참조 또는 lib 옵션을 전달하려는 경우 인덱스는 2가 아니며 (심지어는 실행간에 일관성이 있음). 내 대답에 나와있는 것처럼 스크립트 인수에 액세스하는 더 직접적인 방법이 있습니다. –