题
我有一个微不足道的控制台应用程序。网。这只是个测试的一部分,更大的应用程序。我想指定的"出口码"我的控制台应用程序。我该怎么做这个?
解决方案
3个选择:
- 你可以返回,从
Main
如果您声明Main
方法返回int
. - 你可以打电话
Environment.Exit(code)
. - 你可以设定退出代码使用特性:
Environment.ExitCode = -1;
.这将用,如果没有其他组返回代码或利用其他选项之一以上)。
根据应用程序(控制台的服务,网络应用程序,等等)的不同方法可以使用。
其他提示
除了回答int的答案之外......还要求理智。请在枚举中定义退出代码,如果合适,请使用Flags。它使调试和维护变得更加容易(而且,作为奖励,您可以轻松地在帮助屏幕上打印退出代码 - 您确实有其中一个,对吧?)。
enum ExitCode : int {
Success = 0,
InvalidLogin = 1,
InvalidFilename = 2,
UnknownError = 10
}
int Main(string[] args) {
return (int)ExitCode.Success;
}
您可以使用三种方法从控制台应用程序返回退出代码。
- 修改应用程序中的
Main
方法,使其返回int
而不是void
(返回Integer的函数)
而不是VB.Net中的Sub
,然后从该方法返回退出代码。 - 将 Environment.ExitCode 属性设置为退出代码。请注意,方法1.优先 - 如果
Main
方法返回除void
之外的任何内容(在VB.Net中是Sub
),那么值这个属性将被忽略。 - 将退出代码传递给 Environment.Exit 方法。这将立即终止该过程,而不是其他两种方法。 醇>
应该遵守的一个重要标准是 0
代表'成功'。
在相关主题上,请考虑使用枚举来定义应用程序要返回的退出代码。 FlagsAttribute 将允许您返回代码组合。
另外,请确保将您的应用程序编译为“控制台应用程序”。
如果您打算使用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-我们/库/ system.environment.exitcode.aspx
int code = 2;
Environment.Exit( code );
只需从main返回相应的代码。
int main(string[] args)
{
return 0; //or exit code of your choice
}
如果您的主要具有空白返回签名,请使用ExitCode,否则您需要“设置”它是你返回的价值。
如果Main方法返回void,则可以使用此属性设置将返回到调用环境的退出代码。如果Main不返回void,则忽略此属性。此属性的初始值为零。
作为一个更新斯科特*门罗 答案:
- C#6.0和VB.NET 14.0(VS2015年), 环境。退出 或 环境。Exit(退出) 被要求返回一个非零码从控制台应用程序。改变返回的类型
Main
没有任何影响。 - 在F#4.0(VS2015年),返回值的
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 /库/窗/桌面/ ms681382(v = vs.85)的.aspx
对于“找不到文件”,您会找到典型的代码,例如2。或5表示“拒绝访问”。
当您偶然发现未知代码时,您可以使用此命令找出其含义:
net helpmsg decimal_code
e.g。
net helpmsg 1
返回
功能不正确
使用此代码
Environment.Exit(0);
如果您不想返回任何内容,请使用0作为int。