我在 .NET 中有一个简单的控制台应用程序。它只是一个更大的应用程序的一个测试部分。我想指定我的控制台应用程序的“退出代码”。我该怎么做呢?
14 回答
三个选项:
Main
如果您将Main
方法声明为 return ,则可以将其返回int
。- 你可以打电话
Environment.Exit(code)
。 - 您可以使用属性设置退出代码
Environment.ExitCode = -1;
: . 如果没有其他设置返回代码或使用上述其他选项之一,则将使用此选项)。
根据您的应用程序(控制台、服务、Web 应用程序等),可以使用不同的方法。
除了涵盖 return int 的答案之外......呼吁理智。请在枚举中定义您的退出代码,如果合适,请使用标志。它使调试和维护变得如此容易(而且,作为奖励,您可以轻松地在帮助屏幕上打印出退出代码 - 您确实有其中一个,对吧?)。
enum ExitCode : int {
Success = 0,
InvalidLogin = 1,
InvalidFilename = 2,
UnknownError = 10
}
int Main(string[] args) {
return (int)ExitCode.Success;
}
您可以使用三种方法从控制台应用程序返回退出代码。
- 修改
Main
应用程序中的方法,使其返回一个int
代替(在VB.NET中返回代替void
的函数),然后从该方法返回退出代码。Integer
Sub
- 将Environment.ExitCode属性设置为退出代码。请注意,方法 1. 具有优先权 - 如果该
Main
方法返回的值不是void
(Sub
在 VB.Net 中为 a),则此属性的值将被忽略。 - 将退出代码传递给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
int code = 2;
Environment.Exit( code );
只需从 main 中返回适当的代码。
int Main(string[] args)
{
return 0; // Or exit code of your choice
}
如果您的 main 有一个无效的返回签名,请使用ExitCode 。否则,您需要通过返回的值“设置”它。
如果 Main 方法返回 void,您可以使用此属性设置将返回给调用环境的退出代码。如果 Main 不返回 void,则忽略此属性。此属性的初始值为零。
枚举选项非常好。但是,可以通过将数字相乘来改进它,如下所示:
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 组成等。
作为对Scott Munro 回答的更新:
- 在 C# 6.0 和 VB.NET 14.0 ( Visual Studio 2015 ) 中,需要Environment.ExitCode或Environment.Exit(exitCode)从控制台应用程序返回非零代码。更改的返回类型
Main
无效。 - 在F# 4.0 (Visual Studio 2015) 中,
main
入口点的返回值受到尊重。
您可以在系统错误代码 (0-499)上找到系统错误代码。
您会找到典型的代码,例如“找不到文件”的 2 或“拒绝访问”的 5。
当你偶然发现一个未知代码时,你可以使用这个命令来找出它的含义:
net helpmsg decimal_code
例如,
net helpmsg 1
返回
Incorrect function
使用此代码
Environment.Exit(0);
如果您不想返回任何内容,请使用 0 作为 int。
我这样做是这样的:
int exitCode = 0;
Environment.Exit(exitCode);
或者你可以抛出一个错误(个人喜好):
throw new ArgumentException("Code 0, Environment Exit");
我选择了 ArgumentException,但您可以输入其他。它会正常工作。
只是另一种方式:
public static class ApplicationExitCodes
{
public static readonly int Failure = 1;
public static readonly int Success = 0;
}