517

我在 .NET 中有一个简单的控制台应用程序。它只是一个更大的应用程序的一个测试部分。我想指定我的控制台应用程序的“退出代码”。我该怎么做呢?

4

14 回答 14

668

三个选项:

  • Main如果您将Main方法声明为 return ,则可以将其返回int
  • 你可以打电话Environment.Exit(code)
  • 您可以使用属性设置退出代码Environment.ExitCode = -1;: . 如果没有其他设置返回代码或使用上述其他选项之一,则将使用此选项)。

根据您的应用程序(控制台、服务、Web 应用程序等),可以使用不同的方法。

于 2008-09-30T23:47:57.330 回答
295

除了涵盖 return int 的答案之外......呼吁理智。请在枚举中定义您的退出代码,如果合适,请使用标志。它使调试和维护变得如此容易(而且,作为奖励,您可以轻松地在帮助屏幕上打印出退出代码 - 您确实有其中一个,对吧?)。

enum ExitCode : int {
  Success = 0,
  InvalidLogin = 1,
  InvalidFilename = 2,
  UnknownError = 10
}

int Main(string[] args) {
   return (int)ExitCode.Success;
}
于 2008-10-01T03:30:01.557 回答
55

您可以使用三种方法从控制台应用程序返回退出代码。

  1. 修改Main应用程序中的方法,使其返回一个int代替(在VB.NET中返回代替void的函数),然后从该方法返回退出代码。IntegerSub
  2. Environment.ExitCode属性设置为退出代码。请注意,方法 1. 具有优先权 - 如果该Main方法返回的值不是voidSub在 VB.Net 中为 a),则此属性的值将被忽略。
  3. 将退出代码传递给Environment.Exit方法。与其他两种方法相反,这将立即终止该过程。

应该遵守的一个重要标准是0代表“成功”。

在相关主题上,考虑使用枚举来定义您的应用程序将要返回的退出代码。FlagsAttribute将允许您返回代码组合。

此外,请确保您的应用程序被编译为“控制台应用程序”。

于 2012-08-26T23:07:24.043 回答
44

如果您打算使用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。:)

于 2011-11-22T16:53:44.177 回答
29
System.Environment.ExitCode 

请参阅Environment.ExitCode 属性

于 2008-09-30T23:46:17.537 回答
26
int code = 2;
Environment.Exit( code );
于 2008-09-30T23:46:02.607 回答
14

只需从 main 中返回适当的代码。

int Main(string[] args)
{
    return 0; // Or exit code of your choice
}
于 2008-09-30T23:46:45.413 回答
11

如果您的 main 有一个无效的返回签名,请使用ExitCode 。否则,您需要通过返回的值“设置”它。

Environment.ExitCode 属性

如果 Main 方法返回 void,您可以使用此属性设置将返回给调用环境的退出代码。如果 Main 不返回 void,则忽略此属性。此属性的初始值为零。

于 2008-09-30T23:50:14.703 回答
8

枚举选项非常好。但是,可以通过将数字相乘来改进它,如下所示:

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 组成等。

于 2011-11-21T23:45:59.667 回答
8

作为对Scott Munro 回答的更新:

于 2016-10-11T20:51:22.503 回答
3

您可以在系统错误代码 (0-499)上找到系统错误代码。

您会找到典型的代码,例如“找不到文件”的 2 或“拒绝访问”的 5。

当你偶然发现一个未知代码时,你可以使用这个命令来找出它的含义:

net helpmsg decimal_code

例如,

net helpmsg 1

返回

Incorrect function
于 2016-08-10T12:38:15.173 回答
2

使用此代码

Environment.Exit(0);

如果您不想返回任何内容,请使用 0 作为 int。

于 2019-03-02T16:36:34.390 回答
0

我这样做是这样的:

int exitCode = 0;
Environment.Exit(exitCode);

或者你可以抛出一个错误(个人喜好):

throw new ArgumentException("Code 0, Environment Exit");

我选择了 ArgumentException,但您可以输入其他。它会正常工作。

于 2021-06-27T10:18:46.850 回答
-2

只是另一种方式:

public static class ApplicationExitCodes
{
    public static readonly int Failure = 1;
    public static readonly int Success = 0;
}
于 2020-10-17T19:00:31.870 回答