.NETでコンソールアプリケーションの終了コードを指定するにはどうすればよいですか?
質問
.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つのメソッドがあります。
- アプリケーションの
Main
メソッドを変更して、void
(Integerを返す関数)の代わりに
)、そのメソッドから終了コードを返します。int
を返すようにしますVB.NetのSub
の代わりに - Environment.ExitCode プロパティを終了コードに設定します。メソッド1が優先されることに注意してください-
Main
メソッドがvoid
(VB.Netでは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
http://msdn.microsoft.com/en- us / library / system.environment.exitcode.aspx
int code = 2;
Environment.Exit( code );
mainから適切なコードを返すだけです。
int main(string[] args)
{
return 0; //or exit code of your choice
}
メインにvoidリターンシグネチャがある場合は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を使用します。