当前位置:  开发笔记 > 编程语言 > 正文

如何在.NET中指定控制台应用程序的退出代码?

如何解决《如何在.NET中指定控制台应用程序的退出代码?》经验,为你挑选了10个好方法。

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



1> TheSoftwareJ..:

3个选项:

您可以返回它Main,如果你申报你的Main方法来返回int.

你可以打电话Environment.Exit(code).

您可以使用以下属性设置退出代码:Environment.ExitCode = -1;.如果没有其他设置返回代码或使用上面的其他选项之一,将使用此方法).

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


@DannyBeckett按照惯例,退出代码"0"表示成功,非零表示失败.`return;`表示通过退出代码`0`成功,`return -1;`表示失败.
对于那些想知道为什么在它们的情况下不起作用的人,请确保您的项目编译为"控制台应用程序"而不是"Windows应用程序".
如果我有一个带有一些args的WinForms应用程序,我希望它作为一个控制台应用程序呢?
您还可以使用属性设置退出代码:Environment.ExitCode = -1;
你也可以只输入缅因程序作为int(用int替换void)并使用例如"return -1;" 从主程序返回.这比Environment.Exit()更具可移植性(取决于环境).

2> Mark Bracket..:

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

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

int Main(string[] args) {
   return (int)ExitCode.Success;
}


您可能想要添加,"成功"的值"0"不是偶然的,但实际上是该情况的"标准"值.
这个.这就是为什么SO是互联网历史上最伟大的网站.任何教科书都不能提供这种建议,只能通过与经验丰富的专业人士交谈来收集.谢谢.
你说0是成功的标准值,但是当将0/1转换为boolean时,0为false,1为真!可以更准确地说,退出代码0表示"无错误",而不是"成功",因为退出代码是ErrorResult而不仅仅是结果.
有关microsoft约定的完整列表,请参阅http://msdn.microsoft.com/en-us/library/windows/desktop/ms681382(v=vs.85).aspx.有些人已经制作了一个巨大的竞争列表,并在下面的评论中用于切换案例中.
@MarkShapiro,我猜`0 = Success`来自这样一个事实,即只需要一个成功代码,但许多错误代码,例如0,因为在计算机整数中没有+或 - ,可以用来唯一地标识成功
我知道0是成功的标准.是否有其他退出代码的商定惯例或者它是否对所有人免费?(我认为这些是你在运行预定任务后得到的相同数字).
对不起,但帮助屏幕是什么?

3> Scott Munro..:

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

    修改Main应用程序中的方法,使其返回int而不是void(返回Integer而不是SubVB.Net中的函数),然后返回该方法的退出代码.

    将Environment.ExitCode属性设置为退出代码.请注意,方法1.优先 - 如果Main方法返回除void(Sub在VB.Net中)之外的任何内容,则将忽略此属性的值.

    将退出代码传递给Environment.Exit方法.这将立即终止该过程,而不是其他两种方法.

应该遵守的一个重要标准是0代表"成功".

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

另外,请确保将您的应用程序编译为"控制台应用程序".



4> 小智..:

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


这意味着一个程序会说'你的密码错了'然后继续尝试签署它所签署的任何内容,并且只有在它失败时才停止.一旦失败,你应该回来; 其他任何事情都是警告,程序仍应返回0.
鲜为人知的事实是[Flags]无法启用或禁用按位操作.它只是覆盖ToString方法,以便输出表示按位标志.无论有没有它,您仍然可以进行按位操作.
@Steven很高兴知道,但我仍然建议用该属性装饰用于"标志使用"的枚举,如果没有其他任何传达意图.

5> albertein..:
System.Environment.ExitCode 

http://msdn.microsoft.com/en-us/library/system.environment.exitcode.aspx



6> palehorse..:
int code = 2;
Environment.Exit( code );


为具有无意义名称的变量指定幻数不会减少魔法.
任何技术原因你不只是写"Environment.Exit(2);" ?

7> Esteban Aray..:

只需从main返回适当的代码即可.

int main(string[] args)
{
      return 0; //or exit code of your choice
}


@Mark Lakta:然后改变它,不是吗?
默认的C#控制台应用程序根本不声明main.它声明`static void Main(string [] args);`

8> crashmstr..:

如果您的main具有void返回签名,请使用ExitCode,否则您需要使用返回的值"设置"它.

Environment.ExitCode属性

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



9> 小智..:

作为Scott Munro 答案的更新:

在C#6.0和VB.NET 14.0(VS 2015)中,需要Environment.ExitCode或Environment.Exit(exitCode)才能从控制台应用程序返回非零代码.更改返回类型Main无效.

在F#4.0(VS 2015)中,遵循main入口点的返回值.



10> David..:

枚举选项非常好,但可以通过乘以数字来改进:

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等.


也就是说,如果你在遇到一个错误后再费心去检查是否还有错误.大多数应用没有.
推荐阅读
黄晓敏3023
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有