.NET'te önemsiz bir konsol uygulamam var. Daha büyük bir uygulamanın sadece test kısmıdır. Konsol uygulamamın "çıkış kodunu" belirtmek istiyorum. Bunu nasıl yaparım?
.NET'te önemsiz bir konsol uygulamam var. Daha büyük bir uygulamanın sadece test kısmıdır. Konsol uygulamamın "çıkış kodunu" belirtmek istiyorum. Bunu nasıl yaparım?
Yanıtlar:
3 seçenek:
Main
beyan ederseniz Main
, iade edebilirsiniz int
.Environment.Exit(code)
.Environment.ExitCode = -1;
. Bu, başka hiçbir şey dönüş kodunu ayarlamazsa veya yukarıdaki diğer seçeneklerden birini kullanmazsa kullanılır).Uygulamanıza (konsol, servis, web uygulaması vb.) Bağlı olarak farklı yöntemler kullanılabilir.
0
başarı anlamına gelir ve sıfırdan farklı olmak başarısızlık demektir. return;
çıkış kodu üzerinden başarıyı 0
ve return -1;
başarısızlığı gösterir.
Dönüş int kapsayan cevaplara ek olarak ... akıl sağlığı için bir savunma. Lütfen çıkış kodlarınızı bir numarada ve uygunsa Bayraklarla tanımlayın. Hata ayıklama ve bakımı çok daha kolay hale getirir (ve bir bonus olarak, çıkış kodlarını yardım ekranınıza kolayca yazdırabilirsiniz - bunlardan birine sahipsiniz, değil mi?).
enum ExitCode : int {
Success = 0,
InvalidLogin = 1,
InvalidFilename = 2,
UnknownError = 10
}
int Main(string[] args) {
return (int)ExitCode.Success;
}
0 = Success
sadece bir başarı kodunun gerekli olduğu gerçeğinden geliyor, ancak birçok hata kodu, 0, bilgisayar tamsayılarında + veya - yok gibi, başarıyı benzersiz bir şekilde tanımlamak için kullanılabiliyor
Bir konsol uygulamasından bir çıkış kodu döndürmek için kullanabileceğiniz üç yöntem vardır.
Main
bir döndüren böylece uygulamada yöntemi int
yerine void
(döner bir bir işlevi Integer
yerine Sub
ve sonra da bu yöntemden çıkış kodunu döndürür VB.Net olarak).Main
yöntem void
( Sub
VB.Net'te) dışında bir şey döndürürse , bu özelliğin değeri yok sayılır.Gözlemlenmesi gereken önemli bir standart 0
'Başarı'yı temsil eder.
İlgili bir konuda, uygulamanızın döndüreceği çıkış kodlarını tanımlamak için bir numaralandırma kullanmayı düşünün. FlagsAttribute Kodlarınız bir arada dönmek sağlayacaktır.
Ayrıca, uygulamanızın bir 'Konsol Uygulaması' olarak derlendiğinden emin olun.
Environment.ExitCode
değil yakın program hemen yapar ama Environment.Exit
yöntem hemen programı kapatır
Process
nesne aracılığıyla başlatılırsa, nesneyi isteyebilir WaitForExit()
ve sonra çıkış kodunu isteyebilirsiniz.
David tarafından önerilen yöntemi kullanacaksanız, [Bayraklar] Özelliğine de göz atmalısınız.
Bu, numaralandırmalarda biraz akıllıca işlemler yapmanızı sağlar.
[Flags]
enum ExitCodes : int
{
Success = 0,
SignToolNotInPath = 1,
AssemblyDirectoryBad = 2,
PFXFilePathBad = 4,
PasswordMissing = 8,
SignFailed = 16,
UnknownError = 32
}
Sonra
(ExitCodes.SignFailed | ExitCodes.UnknownError)
16 + 32 olurdu. :)
int code = 2;
Environment.Exit( code );
System.Environment.ExitCode
http://msdn.microsoft.com/en-us/library/system.environment.exitcode.aspx
Sadece uygun kodu main'den geri gönderin.
int main(string[] args)
{
return 0; //or exit code of your choice
}
static void Main(string[] args);
Ana cihazınızda bir geçersiz dönüş imzası varsa ExitCode kullanın, aksi takdirde döndürdüğünüz değere göre "ayarlamanız" gerekir.
Main yöntemi void döndürürse, arama ortamına döndürülecek çıkış kodunu ayarlamak için bu özelliği kullanabilirsiniz. Main, boşluk döndürmezse, bu özellik yoksayılır. Bu özelliğin başlangıç değeri sıfırdır.
Scott Munro'nun cevabı için bir güncelleme olarak :
Main
etkisi yoktur.main
giriş noktasının dönüş değerine uyulur.Main()
ayarlamadı Process.ExitCode
.
int Main
, hala Ortam.ExitCode'a alternatif olarak kullanılabileceğini iddia ediyor . bağlantı
Numaralandırma seçeneği mükemmeldir ancak sayılar aşağıdaki gibi çarpılarak geliştirilebilir:
enum ExitCodes : int
{
Success = 0,
SignToolNotInPath = 1,
AssemblyDirectoryBad = 2,
PFXFilePathBad = 4,
PasswordMissing = 8,
SignFailed = 16,
UnknownError = 32
}
Birden fazla hata olması durumunda, belirli hata numaralarını bir araya getirmek size tespit edilen hataların kombinasyonunu temsil edecek benzersiz bir numara verecektir.
Örneğin, 6 hata seviyesi yalnızca 4 ve 2 hatalarından oluşabilir, 12 yalnızca 4 ve 8 hatalarından oluşabilir, 14 yalnızca 2, 4 ve 8 hatalarından oluşabilir.
2 sentim:
Sistem hata kodlarını burada bulabilirsiniz: https://msdn.microsoft.com/en-us/library/windows/desktop/ms681382(v=vs.85).aspx
"Dosya bulunamadı" için 2 veya "erişim reddedildi" için 5 gibi tipik kodları bulacaksınız.
Bilinmeyen bir koda rastlarsanız, bunun ne anlama geldiğini öğrenmek için bu komutu kullanabilirsiniz:
net helpmsg decimal_code
Örneğin
net helpmsg 1
İadeler
Yanlış işlev
Bu kodu kullan
Environment.Exit(0);
hiçbir şey döndürmek istemiyorsanız int olarak 0 kullanın.