Il valore di ritorno di Main() è leggermente diverso da Environment.ExitCode?
No, sono uguali e vanno nello stesso posto. Puoi vedere questo sperimentando un'applicazione per console che restituisce -1 o imposta Environment.ExitCode
su -1. Vedrai che qualsiasi metodo tu usi funziona e imposta %ERRORLEVEL%
correttamente.
Qual è il modo per individuare facilmente il valore restituito dal metodo Main() in VS2015?
In primo luogo, una rapida parentesi su ciò che sembra accadere. Ecco l'analisi dello stack per un'applicazione console creata utilizzando le impostazioni predefinite del progetto:
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()
noti che il processo host VS è lì.Con il processo di hosting VS disabilitata la traccia dello stack (con le stesse opzioni) si presenta così:
TestApp.exe!TestApp.Program.Main(string[] args)
Se si guarda alla definizione di ThreadHelper.ThreadStart
nel reference source lo vedrai definito come:
internal void ThreadStart(object obj)
Sembra che questo ritorno vuoto sia utilizzato come valore di ritorno del processo, oppure uno degli altri metodi sopra di esso sta consumando il valore restituito e ingoiandolo.
Se si modifica la configurazione di progetto e disattivare il processo di hosting quindi si otterrà un output simile:
The program '[7992] TestApp.exe' has exited with code -1 (0xffffffff).
come previsto. Per disabilitare il processo di hosting, andare alle proprietà del progetto, e nella scheda di debug, deselezionare l'opzione "Abilita il Visual Studio che ospita il processo"
Quando si esce un programma di console, è Environment.Exit() preferito di una semplice dichiarazione di ritorno? Perché una dichiarazione di ritorno è più concisa ai miei gusti.
Qualunque sia la vostra preferenza. Come sottolineato da Jeppe Stig in un commento, per ulteriori informazioni sulle differenze, consultare la documentazione di Environment.Exit
Vedere anche [la documentazione del metodo 'Environment.Exit (Int32)') (https://msdn.microsoft.com /en-us/library/system.environment.exit.aspx) per un elenco di differenze. –
@JeppeStigNielsen Buon punto. Aggiunta una nota a riguardo nel caso in cui il tuo commento scompaia. – theB
* Preferisci * per uscire tornando dal principale. Chiamare 'Environment.Exit' è un hack e non dovrebbe essere necessario in un'applicazione ben progettata. –