ฉันมีแอปพลิเคชั่นคอนโซลเล็กน้อยใน. NET มันเป็นเพียงส่วนหนึ่งในการทดสอบของแอปพลิเคชันขนาดใหญ่ ฉันต้องการระบุ "รหัสทางออก" ของแอปพลิเคชันคอนโซลของฉัน ฉันจะทำสิ่งนี้ได้อย่างไร
ฉันมีแอปพลิเคชั่นคอนโซลเล็กน้อยใน. NET มันเป็นเพียงส่วนหนึ่งในการทดสอบของแอปพลิเคชันขนาดใหญ่ ฉันต้องการระบุ "รหัสทางออก" ของแอปพลิเคชันคอนโซลของฉัน ฉันจะทำสิ่งนี้ได้อย่างไร
คำตอบ:
3 ตัวเลือก:
Mainถ้าคุณประกาศของคุณวิธีการที่จะกลับมาMainintEnvironment.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 ถ้าคุณไม่ต้องการคืนค่าใด ๆ