.NET에서 콘솔 응용 프로그램의 종료 코드를 어떻게 지정합니까?
문제
.NET에 사소한 콘솔 응용 프로그램이 있습니다. 더 큰 응용 프로그램의 테스트 부분 일뿐입니다. 콘솔 응용 프로그램의 "종료 코드"를 지정하고 싶습니다. 어떻게해야합니까?
해결책
3 옵션 :
- 당신은 그것을 반환 할 수 있습니다
Main
당신이 당신의 선언한다면Main
반환 방법int
. - 전화해도됩니다
Environment.Exit(code)
. - 속성을 사용하여 종료 코드를 설정할 수 있습니다.
Environment.ExitCode = -1;
. 다른 것이 없으면 반환 코드를 설정하거나 위의 다른 옵션 중 하나를 사용하는 경우 사용됩니다).
응용 프로그램 (콘솔, 서비스, 웹 앱 등)에 따라 다양한 방법을 사용할 수 있습니다.
다른 팁
Return int 's를 다루는 답변 외에도 ... 정신을위한 탄원. 적절한 경우 깃발과 함께 출구 코드를 열거로 정의하십시오. 디버깅 및 유지 보수가 훨씬 쉽게 만들어집니다 (보너스로서 도움말 화면에서 종료 코드를 쉽게 인쇄 할 수 있습니다. 그 중 하나가 있습니까?).
enum ExitCode : int {
Success = 0,
InvalidLogin = 1,
InvalidFilename = 2,
UnknownError = 10
}
int Main(string[] args) {
return (int)ExitCode.Success;
}
콘솔 응용 프로그램에서 종료 코드를 반환하는 데 사용할 수있는 세 가지 방법이 있습니다.
- 수정하십시오
Main
응용 프로그램의 메소드가 반환되도록int
대신에void
(반환하는 함수Integer
대신에Sub
vb.net)에서 해당 방법에서 종료 코드를 반환하십시오. - 설정 환경 .exitcode 출구 코드에 대한 속성. 메소드 1은 우선 순위 - 인 경우
Main
메소드는 다른 것을 반환합니다void
(a입니다Sub
vb.net) 에서이 속성의 값은 무시됩니다. - 출구 코드를 환경 .exit 방법. 이것은 다른 두 가지 방법과 달리 프로세스를 즉시 종료합니다.
관찰해야 할 중요한 표준은 그 것입니다 0
'성공'을 나타냅니다.
관련 주제에서 열거를 사용하여 응용 프로그램이 반환 할 종료 코드를 정의하십시오. 그만큼 깃발 보호 코드 조합을 반환 할 수 있습니다.
또한 응용 프로그램이 '콘솔 응용 프로그램'으로 컴파일되어 있는지 확인하십시오.
David가 제안한 방법을 사용하려면 [Flags] 속성도 살펴 봐야합니다.
이를 통해 열거적 인 작업을 수행 할 수 있습니다.
[Flags]
enum ExitCodes : int
{
Success = 0,
SignToolNotInPath = 1,
AssemblyDirectoryBad = 2,
PFXFilePathBad = 4,
PasswordMissing = 8,
SignFailed = 16,
UnknownError = 32
}
그 다음에
(ExitCodes.SignFailed | ExitCodes.UnknownError)
16 + 32입니다. :)
System.Environment.ExitCode
http://msdn.microsoft.com/en-us/library/system.environment.exitcode.aspx
int code = 2;
Environment.Exit( code );
예비 코드를 Main에서 반환하십시오.
int main(string[] args)
{
return 0; //or exit code of your choice
}
메인에 무효 리턴 서명이있는 경우 exitcode를 사용하십시오. 그렇지 않으면 반환 값으로 "설정"해야합니다.
기본 메소드가 void를 반환하면이 속성을 사용하여 통화 환경으로 반환 될 종료 코드를 설정할 수 있습니다. 메인이 무효를 반환하지 않으면이 속성은 무시됩니다. 이 속성의 초기 값은 0입니다.
Scott Munro의 업데이트로 대답:
- C# 6.0 및 vb.net 14.0 (vs 2015)에서 환경 .exitcode 또는 Environment.exit (exitcode) 콘솔 응용 프로그램에서 0이 아닌 코드를 반환해야합니다. 반환 유형 변경
Main
효과가 없습니다. - F# 4.0 (VS 2015)에서
main
진입 점이 존중됩니다.
열거 옵션은 우수하지만 다음과 같이 숫자를 곱하여 개선 할 수 있습니다.
enum ExitCodes : int
{
Success = 0,
SignToolNotInPath = 1,
AssemblyDirectoryBad = 2,
PFXFilePathBad = 4,
PasswordMissing = 8,
SignFailed = 16,
UnknownError = 32
}
여러 오류의 경우 특정 오류 번호를 함께 추가하면 감지 된 오류의 조합을 나타내는 고유 한 숫자가 제공됩니다.
예를 들어, 6의 오류 레벨은 오류 4 및 2로만 구성 될 수 있으며, 12는 오류 4 및 8, 14는 2, 4 및 8 등으로 만 구성 될 수 있습니다.
내 2 센트 :
시스템 오류 코드를 여기에서 찾을 수 있습니다.https://msdn.microsoft.com/en-us/library/windows/desktop/ms681382(v=vs.85).aspx
"파일 찾기"에 대해 2와 같은 일반적인 코드 또는 "Access Denied"의 경우 5를 찾을 수 있습니다.
알 수없는 코드를 우연히 발견하면이 명령을 사용하여 그 의미를 찾을 수 있습니다.
net helpmsg decimal_code
예를 들어
NET HELPMSG 1
보고
잘못된 기능
이 코드를 사용하십시오
Environment.Exit(0);
아무것도 반환하지 않으려면 0을 int로 사용하십시오.