.NETでコンソールアプリケーションの終了コードを指定するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/155610

  •  03-07-2019
  •  | 
  •  

質問

.NETには簡単なコンソールアプリケーションがあります。これは、大規模なアプリケーションのテスト部分にすぎません。 「終了コード」を指定したい私のコンソールアプリケーションの。どうすればいいですか?

役に立ちましたか?

解決

3つのオプション:

  • Main メソッドを宣言して int を返す場合、 Main から返すことができます。
  • Environment.Exit(code)を呼び出すことができます。
  • プロパティを使用して終了コードを設定できます: Environment.ExitCode = -1; 。これは、リターンコードを設定するものがない場合、または上記の他のオプションのいずれかを使用する場合に使用されます)。

アプリケーション(コンソール、サービス、Webアプリなど)に応じて、さまざまな方法を使用できます。

他のヒント

返り値をカバーする答えに加えて、正気を求めて。終了コードを列挙型で定義し、必要に応じてフラグを付けてください。デバッグとメンテナンスが非常に簡単になります(おまけとして、ヘルプ画面に終了コードを簡単に印刷できます-そのうちの1つがありますよね?)

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

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

コンソールアプリケーションから終了コードを返すために使用できる3つのメソッドがあります。

  1. アプリケーションの Main メソッドを変更して、 void Integerを返す関数)の代わりに int を返すようにしますVB.Netの Sub の代わりに)、そのメソッドから終了コードを返します。
  2. Environment.ExitCode プロパティを終了コードに設定します。メソッド1が優先されることに注意してください- Main メソッドが void (VB.Netでは Sub )以外を返す場合、値このプロパティの無視されます。
  3. 終了コードを Environment.Exit メソッドに渡します。これにより、他の2つの方法とは異なり、プロセスが直ちに終了します。

注意すべき重要な基準は、 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になります。:)

int code = 2;
Environment.Exit( code );

mainから適切なコードを返すだけです。

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

メインにvoidリターンシグネチャがある場合はExitCodeを使用します。そうでない場合は、「設定」する必要があります。返される値によって。

Environment.ExitCodeプロパティ

  

Mainメソッドがvoidを返す場合、このプロパティを使用して、呼び出し環境に返される終了コードを設定できます。 Mainがvoidを返さない場合、このプロパティは無視されます。このプロパティの初期値はゼロです。

Scott Munroの回答

  • C#6.0およびVB.NET 14.0(VS 2015)では、 Environment.ExitCode または Environment.Exit(exitCode)は、コンソールアプリケーションからゼロ以外のコードを返すために必要です。 Main の戻り型を変更しても効果はありません。
  • F#4.0(VS 2015)では、 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 / library / windows / desktop / ms681382(v = vs.85).aspx

「ファイルが見つかりません」の2のような典型的なコードがあります。または「アクセスが拒否されました」の場合は5。

そして未知のコードに出くわしたとき、このコマンドを使用してその意味を調べることができます:

net helpmsg decimal_code

e.g。

  

net helpmsg 1

返品

  

不正な機能

このコードを使用

Environment.Exit(0);

何も返さない場合は、intとして0を使用します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top