.NETに簡単なコンソールアプリケーションがあります。これは、より大きなアプリケーションのテスト部分にすぎません。コンソールアプリケーションの「終了コード」を指定したいのですが。どうすればよいですか?
.NETに簡単なコンソールアプリケーションがあります。これは、より大きなアプリケーションのテスト部分にすぎません。コンソールアプリケーションの「終了コード」を指定したいのですが。どうすればよいですか?
回答:
3つのオプション:
Main
ように宣言すれば、それを返すことができます。Main
int
Environment.Exit(code)
。Environment.ExitCode = -1;
。これは、戻りコードを設定したり、上記の他のオプションのいずれかを使用したりする場合に使用されます。アプリケーション(コンソール、サービス、Webアプリなど)に応じて、さまざまな方法を使用できます。
0
は成功を意味し、ゼロ以外の値は失敗を意味します。return;
終了コードを通じて成功を示し、失敗0
をreturn -1;
示します。
リターンintをカバーする答えに加えて...正気の嘆願。必要に応じてフラグを付けて、列挙型で終了コードを定義してください。デバッグとメンテナンスが非常に簡単になります(おまけとして、ヘルプ画面で終了コードを簡単に出力できます-そのうちの1つはありますよね?)。
enum ExitCode : int {
Success = 0,
InvalidLogin = 1,
InvalidFilename = 2,
UnknownError = 10
}
int Main(string[] args) {
return (int)ExitCode.Success;
}
0 = Success
成功コードは1つしか必要ないという事実から来ていると思いますが、コンピューター整数に+または-がないような0など、多くのエラーコードを使用して成功を一意に識別できます
コンソールアプリケーションから終了コードを返すために使用できる3つの方法があります。
Main
アプリケーションのメソッドを変更して、int
代わりにvoid
(VB.NetのInteger
代わりにを返す関数)を返し、Sub
そのメソッドから終了コードを返すようにします。Main
メソッドがvoid
(Sub
VB.Netの)以外のものを返す場合、このプロパティの値は無視されます。遵守すべき重要な基準は、0
「成功」を表すものです。
関連トピックでは、列挙型を使用して、アプリケーションが返す終了コードを定義することを検討してください。FlagsAttributeは、あなたがコードの組み合わせを返すことができます。
また、アプリケーションが「コンソールアプリケーション」としてコンパイルされていることを確認してください。
Environment.ExitCode
はプログラムをすぐに閉じませんが、Environment.Exit
メソッドはプログラムをすぐに閉じます
Process
オブジェクトを介してC#から起動される場合は、オブジェクトにをWaitForExit()
要求し、そこから終了コードを要求できます。
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 );
System.Environment.ExitCode
http://msdn.microsoft.com/en-us/library/system.environment.exitcode.aspx
メインにvoidの戻り署名がある場合は、ExitCodeを使用します。それ以外の場合は、返される値でそれを「設定」する必要があります。
Mainメソッドがvoidを返す場合、このプロパティを使用して、呼び出し環境に返される終了コードを設定できます。Mainがvoidを返さない場合、このプロパティは無視されます。このプロパティの初期値はゼロです。
Scott Munroの回答の更新として:
Main
ても効果はありません。main
エントリポイントの戻り値が考慮されます。Main()
設定さProcess.ExitCode
れませんでした。
int Main
はまだEnvironment.ExitCodeの代替として使用できると主張しています。 リンク
列挙オプションは優れていますが、次のように数値を乗算することで改善できます。
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
例えば
ネットhelpmsg 1
戻り値
正しくない機能