ฉันมีแอปพลิเคชั่นคอนโซลเล็กน้อยใน. NET มันเป็นเพียงส่วนหนึ่งในการทดสอบของแอปพลิเคชันขนาดใหญ่ ฉันต้องการระบุ "รหัสทางออก" ของแอปพลิเคชันคอนโซลของฉัน ฉันจะทำสิ่งนี้ได้อย่างไร
ฉันมีแอปพลิเคชั่นคอนโซลเล็กน้อยใน. NET มันเป็นเพียงส่วนหนึ่งในการทดสอบของแอปพลิเคชันขนาดใหญ่ ฉันต้องการระบุ "รหัสทางออก" ของแอปพลิเคชันคอนโซลของฉัน ฉันจะทำสิ่งนี้ได้อย่างไร
คำตอบ:
3 ตัวเลือก:
Main
ถ้าคุณประกาศของคุณวิธีการที่จะกลับมาMain
int
Environment.Exit(code)
คุณสามารถโทรหาEnvironment.ExitCode = -1;
คุณสามารถตั้งค่ารหัสทางออกโดยใช้คุณสมบัติ: สิ่งนี้จะถูกนำมาใช้หากไม่มีสิ่งใดกำหนดรหัสส่งคืนหรือใช้หนึ่งในตัวเลือกอื่นด้านบน)สามารถใช้วิธีการต่าง ๆ ได้ทั้งนี้ขึ้นอยู่กับแอปพลิเคชันของคุณ (คอนโซลบริการเว็บแอป ฯลฯ )
0
ความสำเร็จหมายถึงและความล้มเหลวที่ไม่เป็นศูนย์หมายถึง return;
บ่งชี้ความสำเร็จผ่านรหัสทางออก0
และreturn -1;
บ่งชี้ความล้มเหลว
นอกจากคำตอบที่ครอบคลุมการกลับมาของ ... ข้ออ้างเพื่อสติ กรุณาโปรดกำหนดรหัสออกของคุณใน enum ด้วยค่าสถานะถ้าเหมาะสม มันทำให้การดีบักและบำรุงรักษาง่ายขึ้นมาก (และเป็นโบนัสคุณสามารถพิมพ์รหัสทางออกบนหน้าจอความช่วยเหลือของคุณ - คุณมีหนึ่งในนั้นใช่ไหม?)
enum ExitCode : int {
Success = 0,
InvalidLogin = 1,
InvalidFilename = 2,
UnknownError = 10
}
int Main(string[] args) {
return (int)ExitCode.Success;
}
0 = Success
มาจากความจริงที่ว่ามีรหัสความสำเร็จเพียงอย่างเดียวที่จำเป็น แต่รหัสข้อผิดพลาดหลายอย่างเช่น 0 ซึ่งไม่มี + หรือ - ในจำนวนเต็มคอมพิวเตอร์สามารถใช้เพื่อระบุความสำเร็จโดยเฉพาะ
มีสามวิธีที่คุณสามารถใช้เพื่อส่งคืนรหัสออกจากแอปพลิเคชันคอนโซล
Main
วิธีการในแอปพลิเคชันของคุณเพื่อให้ส่งคืนการint
แทนที่void
(ฟังก์ชันที่ส่งกลับการInteger
แทนที่Sub
ใน VB.Net) แล้วส่งคืนรหัสออกจากวิธีการนั้นMain
วิธีการส่งคืนสิ่งอื่นที่ไม่ใช่void
(เป็น a Sub
ใน VB.Net) ดังนั้นค่าของคุณสมบัตินี้จะถูกละเว้นมาตรฐานที่สำคัญที่ควรสังเกตคือ0
'ความสำเร็จ'
ในหัวข้อที่เกี่ยวข้องให้พิจารณาใช้การแจงนับเพื่อกำหนดรหัสออกที่แอปพลิเคชันของคุณจะกลับมา FlagsAttributeจะช่วยให้คุณกลับมารวมกันของรหัส
ตรวจสอบให้แน่ใจว่าแอปพลิเคชันของคุณรวบรวมเป็น 'แอปพลิเคชันคอนโซล'
Environment.ExitCode
ไม่ปิดโปรแกรมทันที แต่Environment.Exit
วิธีปิดโปรแกรมทันที
Process
วัตถุคุณสามารถขอให้วัตถุWaitForExit()
นั้นแล้วขอรหัสออกจากมันได้
หากคุณจะใช้วิธีที่ David แนะนำคุณควรดูที่ [Flags] Attribute
สิ่งนี้ช่วยให้คุณสามารถดำเนินการกับบิตได้อย่างชาญฉลาด
[Flags]
enum ExitCodes : int
{
Success = 0,
SignToolNotInPath = 1,
AssemblyDirectoryBad = 2,
PFXFilePathBad = 4,
PasswordMissing = 8,
SignFailed = 16,
UnknownError = 32
}
แล้วก็
(ExitCodes.SignFailed | ExitCodes.UnknownError)
น่าจะเป็น 16 +32 :)
int code = 2;
Environment.Exit( code );
System.Environment.ExitCode
http://msdn.microsoft.com/en-us/library/system.environment.exitcode.aspx
เพียงแค่ส่งคืนรหัสที่เหมาะสมจากหลัก
int main(string[] args)
{
return 0; //or exit code of your choice
}
static void Main(string[] args);
ใช้ ExitCode หากหลักของคุณมีลายเซ็นคืนเป็นโมฆะมิฉะนั้นคุณต้อง "ตั้งค่า" โดยใช้ค่าที่คุณส่งคืน
คุณสมบัติ Environment.ExitCode
หากวิธีการหลักส่งกลับเป็นโมฆะคุณสามารถใช้คุณสมบัตินี้เพื่อตั้งรหัสออกที่จะกลับสู่สภาพแวดล้อมการโทร ถ้า Main ไม่คืนค่าว่างให้คุณสมบัตินี้จะถูกละเว้น ค่าเริ่มต้นของคุณสมบัตินี้เป็นศูนย์
เป็นการอัพเดทคำตอบของ Scott Munro :
Main
ไม่มีผลกระทบmain
จุดเข้าใช้งานจะได้รับการเคารพMain()
ไม่ได้ตั้งค่าProcess.ExitCode
ตามที่เห็นในแอปพลิเคชันการโทร
int Main
ยังคงสามารถใช้เป็นทางเลือกแทน Environment.ExitCode ลิงก์
ตัวเลือกการแจงนับนั้นยอดเยี่ยม แต่สามารถปรับปรุงได้โดยการคูณตัวเลขดังใน:
enum ExitCodes : int
{
Success = 0,
SignToolNotInPath = 1,
AssemblyDirectoryBad = 2,
PFXFilePathBad = 4,
PasswordMissing = 8,
SignFailed = 16,
UnknownError = 32
}
ในกรณีที่มีข้อผิดพลาดหลายรายการการเพิ่มหมายเลขข้อผิดพลาดเฉพาะเข้าด้วยกันจะทำให้คุณมีหมายเลขเฉพาะที่จะแสดงการรวมกันของข้อผิดพลาดที่ตรวจพบ
ตัวอย่างเช่นข้อผิดพลาดระดับ 6 สามารถประกอบด้วยข้อผิดพลาด 4 และ 2, 12 เท่านั้นประกอบด้วยข้อผิดพลาด 4 และ 8, 14 เท่านั้นสามารถประกอบด้วย 2, 4 และ 8 เป็นต้น
2 เซนต์ของฉัน:
คุณสามารถค้นหารหัสข้อผิดพลาดของระบบได้ที่นี่: https://msdn.microsoft.com/en-us/library/windows/desktop/ms681382(v=vs.85).aspx
คุณจะพบรหัสทั่วไปเช่น 2 สำหรับ "file not found" หรือ 5 สำหรับ "access access"
และเมื่อคุณสะดุดกับรหัสที่ไม่รู้จักคุณสามารถใช้คำสั่งนี้เพื่อค้นหาความหมาย:
net helpmsg decimal_code
เช่น
net helpmsg 1
ผลตอบแทน
ฟังก์ชั่นไม่ถูกต้อง
ใช้รหัสนี้
Environment.Exit(0);
ใช้ 0 เป็น int ถ้าคุณไม่ต้องการคืนค่าใด ๆ