.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:
Mainbeyan 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.
0başarı anlamına gelir ve sıfırdan farklı olmak başarısızlık demektir. return;çıkış kodu üzerinden başarıyı 0ve 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 = Successsadece 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.
Mainbir döndüren böylece uygulamada yöntemi intyerine void(döner bir bir işlevi Integeryerine Subve sonra da bu yöntemden çıkış kodunu döndürür VB.Net olarak).Mainyöntem void( SubVB.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.ExitCodedeğil yakın program hemen yapar ama Environment.Exityöntem hemen programı kapatır
Processnesne 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 :
Mainetkisi yoktur.maingiriş 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.