.NET で簡単なコンソール アプリケーションを使用しています。これは、より大きなアプリケーションのテスト部分にすぎません。コンソール アプリケーションの「終了コード」を指定したいと思います。どうすればいいですか?
14 に答える
3 つのオプション:
- メソッドを return に
Main
宣言すると、から返すことができます。Main
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;
}
コンソールアプリケーションから終了コードを返すために使用できるメソッドは3つあります。
Main
アプリケーションのメソッドを変更して、代わりint
に(VB.NETで代わりにvoid
を返す関数)を返すようにしてから、そのメソッドから終了コードを返します。Integer
Sub
- Environment.ExitCodeプロパティを終了コードに設定します。メソッド1が優先されることに注意してください。メソッドが(VB.Netではaである)
Main
以外のものを返す場合、このプロパティの値は無視されます。void
Sub
- 終了コードを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 になります。:)
System.Environment.ExitCode
Environment.ExitCode プロパティを参照してください。
int code = 2;
Environment.Exit( code );
メインから適切なコードを返すだけです。
int Main(string[] args)
{
return 0; // Or exit code of your choice
}
メインに void return 署名がある場合は、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 でのみ構成されます。
システム エラー コードは、システム エラー コード (0-499)で確認できます。
「ファイルが見つかりません」の場合は 2、「アクセスが拒否されました」の場合は 5 など、典型的なコードが見つかります。
また、不明なコードに出くわした場合は、次のコマンドを使用してその意味を調べることができます。
net helpmsg decimal_code
例えば、
net helpmsg 1
戻り値
Incorrect function
別の方法:
public static class ApplicationExitCodes
{
public static readonly int Failure = 1;
public static readonly int Success = 0;
}