我在. net中有一个简单的控制台应用程序。这只是一个更大应用程序的测试部分。我想指定控制台应用程序的“退出代码”。我怎么做呢?
int code = 2; Environment.Exit( code );
System.Environment.ExitCode
看到# EYZ0。
只需从main返回相应的代码。
int Main(string[] args) { return 0; // Or exit code of your choice }
三个选项:
Main
int
Environment.Exit(code)
Environment.ExitCode = -1;
根据您的应用程序(控制台、服务、web应用程序等),可以使用不同的方法。
如果你的main有一个无效返回签名,使用ExitCode。否则,您需要“设置”;它由你返回的值决定。
从# EYZ0:
如果Main方法返回void,则可以使用此属性设置将返回到调用环境的退出代码。如果Main不返回void,则忽略此属性。这个属性的初始值为零。
除了包含返回int的答案之外…这是对理智的恳求。请,请在枚举中定义您的退出代码,如果合适的话,请标记。它使调试和维护变得更加容易(而且,作为奖励,您可以轻松地在帮助屏幕上打印出退出代码——您确实有一个退出代码,对吧?)
enum ExitCode : int { Success = 0, InvalidLogin = 1, InvalidFilename = 2, UnknownError = 10 } int Main(string[] args) { return (int)ExitCode.Success; }
枚举选项非常棒。但是,可以通过将数字相乘来改进:
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组成,等等。
如果你打算使用大卫建议的方法,你还应该看一下[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。:)
有三种方法可用于从控制台应用程序返回退出代码。
void
Integer
Sub
需要注意的一个重要标准是,0代表“成功”。
0
在相关主题中,考虑使用枚举定义应用程序将返回的退出代码。FlagsAttribute将允许您返回代码的组合。
此外,确保您的应用程序被编译为“控制台应用程序”。
您可以在系统错误码(0-499上找到系统错误代码。
您将发现典型的代码,如2表示“文件未找到”;或者5表示“access denied”。
当你偶然发现一个未知的代码时,你可以使用这个命令来找出它的意思:
net helpmsg decimal_code
例如,
net helpmsg 1
返回
Incorrect function
作为斯科特·门罗的回答的更新:
main
使用这段代码
Environment.Exit(0);
如果你不想返回任何东西,就使用0作为int。
换一种说法:
public static class ApplicationExitCodes { public static readonly int Failure = 1; public static readonly int Success = 0; }
我这样做:
int exitCode = 0; Environment.Exit(exitCode);
或者你可以抛出一个错误(个人偏好):
throw new ArgumentException("Code 0, Environment Exit");
我选择了ArgumentException,但你可以输入other。它会工作得很好。