สรุปประเด็นต่างๆ ในการอัพเกรด ASP.NET 1.0 เป็น ASP.NET 2.0
ผู้เขียน:Eve Cole
เวลาอัปเดต:2009-06-30 16:06:42
ฉันได้อัปเกรดโปรเจ็กต์ 1.1 ดั้งเดิมในช่วงไม่กี่วันที่ผ่านมาและพบปัญหาบางอย่าง ฉันจะสรุปไว้ที่นี่และเตือนเพื่อนที่ไม่มีเวลาอัปเกรดหรือพร้อมที่จะอัปเกรดเพื่อหลีกเลี่ยงการอ้อมและเสียเวลาในระหว่างกระบวนการอัปเกรด
1. รูปแบบการประมวลผลของไฟล์ Global.asax นั้นแตกต่างออกไป และข้อผิดพลาดจะเกิดขึ้นหลังการแปลง ในปี 2003 Global.asax มีโค้ดโพสต์ไฟล์ ภายใต้เวอร์ชัน 2.0 ไฟล์การแยกโค้ดจะถูกย้ายไปยังไดเร็กทอรี App_Code เพื่อให้สามารถกลายเป็นไฟล์ได้โดยอัตโนมัติ ใช้งานได้ผ่านแอพพลิเคชั่น เข้าถึงเพจ ASP.NET ใดก็ได้ในโปรแกรม แอตทริบิวต์ "Code-behind" จะถูกลบออกจากคำสั่งในไฟล์ ASAX vs2005 เขียนโค้ดโดยตรงใน Global.asax ดังนั้นคุณต้องลบไฟล์ที่แปลงแล้วและเพิ่มใหม่อีกครั้ง และคัดลอกโค้ดที่เกี่ยวข้อง
ไม่มีไฟล์โครงการใน 2.2.0 ในแอปพลิเคชัน 1.1 ไฟล์โปรเจ็กต์ประกอบด้วยการตั้งค่าบิลด์ การอ้างอิงถึงแอสเซมบลีภายนอก และรายการไฟล์ในโปรเจ็กต์ ในแอปพลิเคชัน 2.0 การตั้งค่าเวอร์ชันและรายการไฟล์ไม่จำเป็นอีกต่อไป เนื่องจากไฟล์ทั้งหมดในไดเร็กทอรีโครงการเว็บถือว่าเป็นส่วนหนึ่งของโครงการเว็บ
3. โหมดการแยกรหัส
ใน ASP.NET 1.1 โหมดการแยกโค้ดจะแยกเนื้อหา (เช่น test.aspx) ออกจากโค้ด (เช่น test.aspx.cs) หน้าเนื้อหาสืบทอดมาจากหน้าที่แยกโค้ด ซึ่งมีโค้ดที่ผู้ใช้และผู้ออกแบบสร้างขึ้น
ASP.NET 2.0 ปรับปรุงโหมดการแยกโค้ดผ่านการใช้คลาสบางส่วน โดยใช้คีย์เวิร์ดบางส่วนเพื่อแยกโค้ดของคลาสเดียวออกเป็นสองไฟล์แยกกัน อนุญาตให้คลาสขยายหลายไฟล์ ในโหมดแยกรหัสใหม่ หน้าเนื้อหาจะสืบทอดมาจากคลาสที่คอมไพล์ ซึ่งประกอบด้วยหน้าที่แยกรหัสที่เกี่ยวข้องและไฟล์ stub ที่สร้างขึ้นโดยอัตโนมัติซึ่งกำหนดการประกาศฟิลด์สำหรับการควบคุมที่ใช้ในหน้าเนื้อหา การเปลี่ยนแปลงนี้จะแยกโค้ดที่สร้างขึ้นโดยอัตโนมัติออกจากโค้ดของผู้ใช้ และทำให้หน้าการแยกโค้ดมีขนาดเล็กลงและสะอาดขึ้นอย่างมาก โครงสร้างคลาสบางส่วนยังช่วยลดความเสี่ยงที่เพจจะพังโดยไม่ตั้งใจด้วยการแก้ไขโค้ดที่สร้างโดยนักออกแบบ
หากมีข้อผิดพลาดเกิดขึ้น ให้ตรวจสอบว่ามีคำหลักบางส่วนหรือไม่ หรือไม่ก็เพิ่มคำหลักบางส่วน
4. ตรวจสอบไวยากรณ์ โปรแกรม asp.net1.1 จะไม่ตรวจสอบข้อผิดพลาดทางไวยากรณ์ใน aspx, aspcx และไฟล์อื่น ๆ เมื่อทำการคอมไพล์ ในขณะที่ vs2005 จะตรวจสอบไวยากรณ์ใน aspx, aspcx และไฟล์อื่น ๆ ทั้งหมดในโครงการเมื่อทำการคอมไพล์ ดังนั้นหากมีข้อผิดพลาดทางไวยากรณ์ จะทำให้คอมไพล์ผ่านไม่ได้
5. ประกาศการควบคุม หากมีการประกาศตัวควบคุมทั้งหมดบนเพจ .aspx ให้ลบการประกาศการควบคุมทั้งหมดออกจากไฟล์การแยกโค้ด มิฉะนั้น ข้อผิดพลาดจะถูกรายงาน: ข้อกำหนดที่ซ้ำกัน
6. (C# เท่านั้น) ย้ายโค้ด hooking ของเหตุการณ์จากฟังก์ชัน InitialzeComponent ในไฟล์แยกโค้ดลงในเพจ .aspx โปรดทราบว่าการดำเนินการนี้ใช้ไม่ได้กับเหตุการณ์ที่เรียกโดยอัตโนมัติ รวมถึง Page_Init, Page_Load, Page_DataBind, Page_PreRender, Page_Unload, Page_Error, Page_AbortTransaction และ Page_CommitTransaction
7. วิธีการปรับใช้ (ไซต์ที่คอมไพล์แล้ว คอมไพล์แบบเต็ม อัปเดตได้ ฯลฯ) ใน 1.x เว็บแอปพลิเคชันได้รับการคอมไพล์ล่วงหน้าและปรับใช้เป็นชุดประกอบขนาดใหญ่ชุดเดียว หน้าเนื้อหา (*.aspx) ไม่ได้ถูกคอมไพล์บนเซิร์ฟเวอร์ แต่สามารถแก้ไขได้บนเซิร์ฟเวอร์ ด้วยโหมดการคอมไพล์เพจใหม่และโครงสร้างไดเร็กทอรี คุณสามารถใช้การกำหนดค่าที่แตกต่างกันได้หลากหลายเพื่อปรับใช้แอปพลิเคชัน ASP.NET 2.0 ในกรณีหนึ่ง คุณสามารถคอมไพล์เพจ ASPX ทั้งหมดล่วงหน้าและปรับใช้เว็บแอปพลิเคชันที่ประกอบด้วยแอสเซมบลีที่คอมไพล์แล้วอย่างสมบูรณ์ ในโหมดนี้ คุณไม่สามารถเปลี่ยนแอปพลิเคชันบนเซิร์ฟเวอร์ได้อย่างง่ายดาย หรือคุณสามารถปรับใช้แอปพลิเคชันของคุณได้โดยไม่ต้องคอมไพล์โค้ดใดๆ ล่วงหน้า ในการกำหนดค่านี้ คุณสามารถเปลี่ยนเพจ .aspx ไฟล์แยกโค้ด หรือโค้ดอื่นๆ ในแอปพลิเคชันได้โดยตรงบนเซิร์ฟเวอร์ เมื่อผู้ใช้ร้องขอเพจบนเซิร์ฟเวอร์ เพจนั้นจะถูกคอมไพล์แบบไดนามิก
8. เปลี่ยนคุณสมบัติ CodeBehind ทั้งหมดในเพจ .aspx เป็นคุณสมบัติ CodeFile
CodeBehind: ระบุชื่อของไฟล์ที่คอมไพล์ซึ่งมีคลาสที่เกี่ยวข้องกับเพจ คุณสมบัตินี้ไม่สามารถใช้ได้ในขณะรันไทม์
คุณสมบัตินี้มีไว้สำหรับความเข้ากันได้กับ ASP.NET เวอร์ชันก่อนหน้าเพื่อใช้ฟังก์ชันการทำงานของโค้ดล่าช้า ใน ASP.NET เวอร์ชัน 2.0 คุณควรใช้คุณสมบัติ CodeFile เพื่อระบุชื่อของไฟล์ต้นฉบับแทน และใช้คุณสมบัติ Inherits เพื่อระบุชื่อแบบเต็มของคลาส
รหัสไฟล์
ระบุเส้นทางไปยังไฟล์โค้ดหลังที่อ้างอิงโดยเพจ คุณสมบัตินี้ใช้กับคุณสมบัติสืบทอดเพื่อเชื่อมโยงไฟล์ต้นฉบับที่อยู่เบื้องหลังโค้ดกับเว็บเพจ คุณสมบัตินี้ใช้ได้กับเพจที่คอมไพล์แล้วเท่านั้น
9. ย้ายไฟล์โค้ดอิสระทั้งหมดและ AssemblyInfo.cs ไปยังไดเร็กทอรี App_Code
อย่างไรก็ตาม หลังจากเรียกใช้ตัวช่วยสร้างการแปลง คุณอาจพบว่าไฟล์การแยกโค้ดบางไฟล์ (เช่น *.aspx.cs หรือ *.ascx.vb) ได้ถูกย้ายไปยังไดเร็กทอรี App_Code สิ่งนี้บ่งชี้ว่าหน้าเนื้อหาของไฟล์แยกโค้ดมีคำสั่ง Codebehind ที่มีรูปแบบไม่ถูกต้องและไม่ได้รับการตั้งค่าอย่างถูกต้อง นั่นคือ ตัวช่วยสร้างการแปลงไม่สามารถระบุได้ว่าแฟ้มการแยกโค้ดถูกผูกไว้กับเพจ .aspx ที่ระบุจริงหรือไม่
10. บริการทางเว็บ ใน ASP.NET 1.x บริการทางเว็บ (.asmx) จะถูกแบ่งออกเป็นหน้าส่วนหัวว่าง (.asmx) และไฟล์ที่แยกรหัสซึ่งมีวิธีการจริงโดยอัตโนมัติ
ภายใต้ Asp.net2.0:
• ย้ายคลาสการแยกโค้ดไปยังไดเร็กทอรี App_Code เพื่อให้สามารถเข้าถึงได้โดยอัตโนมัติจากเพจ ASP.NET ใดๆ ในแอปพลิเคชัน
• เปลี่ยนคุณสมบัติ CodeBehind ในไฟล์ .asmx ให้ชี้ไปยังตำแหน่งใหม่
(โปรดทราบว่าไฟล์ที่แยกโค้ดไม่ได้ใช้คลาสในเครื่อง ดังนั้นแอตทริบิวต์ CodeBehind ยังคงถูกใช้ต่อไป)
• เปลี่ยนการประกาศขอบเขตเริ่มต้น เพื่อน และขอบเขตภายในทั้งหมดเป็นสาธารณะ
คุณพบปัญหาอะไรบ้างในระหว่างกระบวนการอัปเกรดจาก 1.1 เป็น 2.0 คุณสามารถจดไว้เพื่อให้ทุกคนสามารถเรียนรู้ร่วมกันและหลีกเลี่ยงการออกนอกเส้นทาง