Main() の戻り値は Environment.ExitCode と多少異なりますか?
いいえ、彼らは同じで、同じ場所に行きます。これは、-1 を返すか、-1 に設定Environment.ExitCode
するだけのコンソール アプリケーションで実験することで確認できます。どちらの方法を使用しても正しく機能し、%ERRORLEVEL%
正しく設定されていることがわかります。
VS2015でMain()メソッドの返り値を簡単に調べる方法とは?
まず、何が起こっているように見えるかについて簡単に説明します。デフォルトのプロジェクト設定を使用して作成されたコンソール アプリケーションのスタック トレースを次に示します。
TestApp.exe!TestApp.Program.Main(string[] args)
[Native to Managed Transition]
[Managed to Native Transition]
mscorlib.dll!System.AppDomain.ExecuteAssembly(string assemblyFile, System.Security.Policy.Evidence assemblySecurity, string[] args)
Microsoft.VisualStudio.HostingProcess.Utilities.dll!Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
mscorlib.dll!System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, object state, bool preserveSyncCtx)
mscorlib.dll!System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, object state, bool preserveSyncCtx)
mscorlib.dll!System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, object state)
mscorlib.dll!System.Threading.ThreadHelper.ThreadStart()
VS ホスト プロセスがあることに注意してください。VS ホスティング プロセスを無効にすると、スタック トレース (同じオプションを使用) は次のようになります。
TestApp.exe!TestApp.Program.Main(string[] args)
参照元ThreadHelper.ThreadStart
のの定義を見ると、次のように定義されていることがわかります。
internal void ThreadStart(object obj)
この void 戻り値がプロセスの戻り値として使用されているか、その上の他のメソッドのいずれかが戻り値を消費して飲み込んでいるようです。
プロジェクト構成を変更してホスティング プロセスを無効にすると、次のような出力が得られます。
The program '[7992] TestApp.exe' has exited with code -1 (0xffffffff).
あなたが期待するように。ホスティング プロセスを無効にするには、プロジェクトのプロパティに移動し、[デバッグ] タブで [Visual Studio ホスティング プロセスを有効にする] のチェックを外します。
コンソール プログラムを終了するとき、単純な return ステートメントよりも Environment.Exit() の方が優先されますか? return ステートメントの方が私の好みではより簡潔だからです。
どちらでも構いません。コメントで Jeppe Stig が指摘したように、違いの詳細については、ドキュメントを参照してください。Environment.Exit