2009-04-12 4 views

답변

37

Environment.GetCommandLineArgs()으로 전화하십시오.

+2

GetCommandLineArgs은 [심각한 결함 (http://stackoverflow.com/questions/9287812/backslash-and-quote-in-command-line-arguments). 기피. 낱말을 전파하십시오. – Neolisk

1
System.Diagnostics.Process.GetCurrentProcess().StartInfo.Arguments 
+0

사실,이 작동하지 않는 것 같습니다. 항상 비어있는 것 같습니다. http://stackoverflow.com/questions/344056/why-is-startinfo-processstartinfo-always-empty – Carsten

1

응용 프로그램의 옵션을 포함하는 클래스를 만듭니다. main 메소드에서 그 클래스의 인스턴스를 생성하고, 커맨드 라인 인자로 그것을 초기화하고, 그것을 필요로하는 클래스에 전달한다.

또는 Environment.GetCommandLineArgs()을 사용하는 CustomConfigClass.Create() 메서드를 통해 만든 다음 언제든지 클래스를 초기화 할 수 있습니다.

첫 번째 옵션은 클래스를 단위 테스트 용으로 준비하고 나중에 명령 줄에 대한 종속성으로 인해 응용 프로그램을 중단시키지 않고 대체 구성 방법으로 전환하기가 더 쉽기 때문에 내 권장 사항입니다.

+0

을 참조하십시오. 첫 번째 옵션은 여전히 ​​다른 클래스에 대한 기본 메소드를 알아야하므로 내 문제가 해결되지 않습니다. IOC 컨테이너를 사용하고 있으므로 GetCommandLineArgs 기능을 제공하는 서비스를 만들고 다른 서비스가이 서비스를 사용하도록 만듭니다. 감사. –

+1

그건 내 포인트를 약간 그리워합니다. IoC를 사용한다면, 커맨드 라인 args를 리턴하고, config를 리턴하는 서비스 인터페이스를 가지며, 커맨드 라인에서이를 얻는 클래스를 구현하는 서비스를 가지고 있지 않아야한다. 그렇게하면 단위 테스트를 위해 다른 클래스로 대체 할 수 있습니다. –

-2

String [] myStr = Environment.GetCommandLineArgs();

예를 완료하는 데 항상 좋습니다.

4

당신이 사용하는 경우 .NET Compact Framework에서, Environment.GetCommandLineArgs() 메소드가 구현되지 않고 System.Diagnostics.Process.GetCurrentProcess(). StartInfo.Arguments 그래서 항상 당신은 주요 기능을 사용해야합니다 빈 문자열을 반환 그리고 다른 클래스에 인수를 전달하십시오.

예 :

[MTAThread] 
static void Main(String[] commandLineArguments) 
{ 
    CommandLineHelper.parse(commandLineArguments); 
} 

public static class CommandLineHelper 
{ 
    public static void parse(String[] commandLineArguments) { 
    // add your code here 
    } 
} 
+0

Compact Framework에 감사드립니다. 제 경우에는 args가 지정되었을 때 기본 폼을 표시하고 싶지 않았기 때문에 exe는 자동 모드로 실행됩니다.하지만 모든 유형의 정적 클래스에서 사용할 수있는 정적 클래스에 args를 저장할 수 있다고 제안 했으므로 신청. 이것은 모든 프레임 워크에서 작동해야합니다. 여기에 관심이있는 사람들을 위해 제 코드가 있습니다. static void Main (String [] cmd) { if (cmd.Length == 0) Application.Run (새 frmMain()); else MessageBox.Show (cmd [0]); } – kuklei

관련 문제