如何在.NET中指定控制台应用程序的退出代码?
我在.NET中有一个简单的控制台应用程序。 这只是大型应用程序的testing部分。 我想指定我的控制台应用程序的“退出代码”。 我该怎么做呢?
如果声明Main
方法返回int
,或者调用Environment.Exit(code)
,则可以从Main
返回它。
除了涵盖返回诠释的答案外,还要求理智。 请在enum中定义退出代码,如果合适的话使用Flags。 它使debugging和维护变得更加容易(作为奖励,您可以轻松地在帮助屏幕上打印退出代码 – 您确实有这些代码,对吗?)。
enum ExitCode : int { Success = 0, InvalidLogin = 1, InvalidFilename = 2, UnknownError = 10 } int Main(string[] args) { return (int)ExitCode.Success; }
如果您要使用Davidbuild议的方法,您还应该查看[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. 🙂
有三种方法可用于从控制台应用程序返回退出代码。
- 修改应用程序中的
Main
方法,使其返回一个int
而不是void
(一个在VB.Net中返回Integer
而不是Sub
的函数),然后从该方法返回退出代码。 - 将Environment.ExitCode属性设置为退出代码。 请注意,方法1优先 – 如果
Main
方法返回除void
以外的任何东西(在VB.Net中是一个Sub
),那么这个属性的值将被忽略。 - 将退出代码传递给Environment.Exit方法。 这将立即终止该过程,而不是其他两种方法。
应该注意的一个重要标准是0
代表“成功”。
在相关主题上,可以考虑使用枚举来定义应用程序要返回的退出代码。 FlagsAttribute将允许您返回代码的组合。
另外,确保您的应用程序被编译为“控制台应用程序”。
System.Environment.ExitCode
http://msdn.microsoft.com/en-us/library/system.environment.exitcode.aspx
int code = 2; Environment.Exit( code );
如果你的主有一个void返回签名,使用ExitCode,否则你需要通过你返回的值“设置”它。
Environment.ExitCode属性
如果Main方法返回void,则可以使用此属性来设置将返回到调用环境的退出代码。 如果Main不返回void,则忽略此属性。 此属性的初始值为零。
只需从main返回适当的代码即可。
int main(string[] args) { return 0; //or exit code of your choice }
枚举选项是优秀的,但可以通过乘以数字来改善:
enum ExitCodes : int { Success = 0, SignToolNotInPath = 1, AssemblyDirectoryBad = 2, PFXFilePathBad = 4, PasswordMissing = 8, SignFailed = 16, UnknownError = 32 }
在出现多个错误的情况下,将特定的错误编号加在一起会给你一个唯一的编号,代表检测到的错误的组合。
例如,错误级别6只能由错误4和错误2组成,错误只能由错误4和错误8组成,错误级别14只能由2,4和8等组成。
作为斯科特·芒罗的回答更新:
- 在C#6.0和VB.NET 14.0(VS 2015)中,无论是Environment.ExitCode还是Environment.Exit(exitCode)都需要从控制台应用程序返回非零代码。 更改
Main
的返回types不起作用。 - 在F#4.0(VS 2015)中,
main
入口点的返回值受到尊重。
我的2美分:
您可以在这里find系统错误代码: https : //msdn.microsoft.com/en-us/library/windows/desktop/ms681382(v=vs.85).aspx
你会发现典型的代码如2“文件未find”或5代表“访问被拒绝”。
而当你遇到一个未知的代码时,你可以使用这个命令来找出它的含义:
net helpmsg decimal_code
例如
net helpmsg 1
回报
function不正确