私は.NETで簡単なコンソールアプリケーションを持っています。これは、より大きなアプリケーションの単なるテスト部分です。私のコンソールアプリケーションの「終了コード」を指定したいのですが。どうやってこれをするの?
3つのオプション:
Main
メソッドを宣言してMain
を返す場合は、int
からそれを返すことができます。Environment.Exit(code)
を呼ぶことができます。Environment.ExitCode = -1;
。他に何も戻りコードを設定しない場合、または上記の他のオプションのいずれかを使用している場合は、これが使用されます。アプリケーション(コンソール、サービス、Webアプリケーションなど)に応じて、さまざまな方法があります。
戻り値intをカバーする答えに加えて...正気の願い。必要に応じてFlagsを使用して、終了コードを列挙型で定義してください。それはデバッグとメンテナンスをとても簡単にします(そして、おまけとして、あなたはあなたのヘルプスクリーンに簡単に終了コードをプリントアウトすることができます - あなたはそれらのうちの1つを持っている、そうですか?).
enum ExitCode : int {
Success = 0,
InvalidLogin = 1,
InvalidFilename = 2,
UnknownError = 10
}
int Main(string[] args) {
return (int)ExitCode.Success;
}
コンソールアプリケーションから終了コードを返すには、3つの方法があります。
Main
メソッドを変更して、int
の代わりにvoid
を返し(VB.NetのInteger
の代わりにSub
を返す関数)、そのメソッドから終了コードを返すようにします。Main
メソッドがvoid
(VB.NetではSub
)以外の何かを返す場合、このプロパティの値は無視されます。遵守すべき重要な基準は、0
が「成功」を表すということです。
関連トピックについては、列挙型を使用してアプリケーションが返す予定の終了コードを定義することを検討してください。 FlagsAttribute を使用すると、コードの組み合わせを返すことができます。
また、アプリケーションが「コンソールアプリケーション」としてコンパイルされていることを確認してください。
Davidが提案した方法を使うつもりなら、[Flags]属性も見てください。
これにより、enumに対して少し賢い操作を行うことができます。
[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/ja-jp/library/system.environment.exitcode.aspx
int code = 2;
Environment.Exit( code );
Mainから適切なコードを返すだけです。
int main(string[] args)
{
return 0; //or exit code of your choice
}
メインに無効なリターンシグネチャがある場合はExitCodeを使用します。それ以外の場合は、リターン値で「設定」する必要があります。
Mainメソッドがvoidを返す場合は、このプロパティを使用して呼び出し元の環境に返される終了コードを設定できます。 Mainがvoidを返さない場合、このプロパティは無視されます。このプロパティの初期値は0です。
Scott Munroの 答え の更新として:
Main
の戻り型を変更しても効果はありません。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/ja-jp/library/windows/desktop/ms681382(v=vs.85).aspx
「ファイルが見つかりません」の場合は2、「アクセスが拒否された場合」の場合は5のような一般的なコードがあります。
そして、未知のコードに出くわしたときは、このコマンドを使用してそれが何を意味するのかを調べることができます。
net helpmsg decimal_code
例えば.
ネットhelpmsg 1
戻る
誤った機能
このコードを使う
Environment.Exit(0);
何も返さない場合は、intとして0を使用してください。