Main() ortamının dönüş değeri, Environment.ExitCode'dan biraz farklı mıdır?
Hayır, aynıdır ve aynı yere giderler. Bunu, -1 değerini döndüren veya Environment.ExitCode
değerini -1'e ayarlayan bir konsol uygulaması ile deneme yaparak görebilirsiniz. Hangi yöntemi kullanırsanız kullanın ve %ERRORLEVEL%
doğru şekilde ayarlar.
VS2015'deki Main() yönteminin dönüş değerini kolayca bulmanın yolu nedir?
İlk olarak, neler olduğuyla ilgili hızlı bir kenara. İşte varsayılan proje ayarları kullanılarak oluşturulan bir konsol uygulaması için yığın izleme: VS konak süreç var
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()
Bildirim söyledi.(Aynı seçeneklerle) yığın izini devre VS barındırma işlemiyle şuna benzer:
TestApp.exe!TestApp.Program.Main(string[] args)
Eğer reference source içinde ThreadHelper.ThreadStart
tanımına bakacak olursak bunu olarak tanımlanan görürsünüz:
internal void ThreadStart(object obj)
Bu boşluk geri dönüşü, işlem geri dönüş değeri olarak kullanılıyor ya da üstündeki diğer yöntemlerden biri, dönüş değerini tüketiyor ve yutuyor.
proje yapılandırmasını değiştirmek ve barındırma işlemini devre dışı bırakırsanız o zaman çıkış gibi alacak:
The program '[7992] TestApp.exe' has exited with code -1 (0xffffffff).
beklediğiniz gibi. barındırma işlemini devre dışı bırakmak için, proje özelliklerine gidin ve bir konsol programı çıkarken ayıklama sekmesinde, "Enable Visual Studio barındıran süreci"
işaretini kaldırın Environment.Exit() basit daha tercih edilir dönüş beyanı? Çünkü bir iade ifadesi benim zevkime daha açık. Hangisini tercih ederseniz edin.
Jeppe Stig tarafından bir yorumda belirtildiği gibi, farklılıklar hakkında daha fazla bilgi için, Environment.Exit
belgelerine bakın. Ayrıca bkz. [The Environment.Exit (Int32) 'yöntem belgeleri] (https://msdn.microsoft.com /en-us/library/system.environment.exit.aspx) farklılıklar listesi için. –
@JeppeStigNielsen İyi nokta. Yorumunuzun kaybolması durumunda bunun hakkında bir not eklendi. – theB
* Ana kaynaktan dönerek çıkmak için * tercih edin. 'Environment.Exit' çağırmak bir korsanlıktır ve iyi tasarlanmış bir uygulamada gerekli olmamalıdır. –