1. การแนะนำปัญหา ในระหว่างกระบวนการพัฒนาเว็บไซต์ VS2005 การเผยแพร่เว็บไซต์มักจะมีปัญหาอยู่เสมอ เว็บไซต์ที่สร้างโดย VS2005 มีไดเร็กทอรีเริ่มต้นหลายรายการ: App_Code, App_Data, App_Themes...
หากเป็นไฟล์ cs/vb เช่น คลาส UploadFile.cs ไฟล์คลาสนี้ไม่มีไฟล์ aspx ที่มองเห็นได้ ดังนั้นไฟล์นี้จะต้องวางไว้ในไดเร็กทอรี App_Code มิฉะนั้นคลาสนี้จะไม่สามารถเข้าถึงได้ในเว็บไซต์ VS2005 จากนั้น แค่ใส่เข้าไปแต่เวลาคอมไพล์ (VS2005 ของผมเป็นเวอร์ชั่น Team เจเนอเรชั่นไม่ตอบสนอง รู้สึกเหมือนเช็คโค้ดอีกครั้ง และใช้ได้แต่เว็บเผยแพร่พรีคอมไพล์เท่านั้น ไม่รู้ว่าเวอร์ชั่นอื่นเป็นไงบ้าง .) ปัญหาเกิดขึ้น หลังจากเลือกเว็บไซต์เผยแพร่แล้ว คุณจะสามารถเลือกวิธีการเผยแพร่ได้ โดยทั่วไป คุณสามารถเลือกค่าเริ่มต้นได้ โดยวิธีนี้ จำนวน DLL ที่สร้างขึ้นจะมีน้อยลง , App_Code.dll ในไดเร็กทอรี bin App_Web_ (อักขระสุ่ม).dll, dll ที่อ้างอิง และไฟล์อื่นๆ ปัญหาอยู่ที่นี่ หากคุณต้องการสร้างโปรแกรมที่ปราศจากการจำลองเสมือน เป็นไปได้ไหมที่จำเป็นต้องวาง App_Code.dll สองรายการในไดเร็กทอรี bin จะไม่มีความขัดแย้ง? นอกจากนี้ หากโปรแกรมมีการเปลี่ยนแปลงเพียงครั้งเดียวและจำเป็นต้องเผยแพร่ซ้ำ ก็แค่นั้นแหละ มาดูสิ่งดีๆ ที่ VS2005 ได้ทำกัน inherits="MyCodeGif, App_Web_vf3ukhnv" เดิมเป็นไฟล์ MyCodeGif.aspx และไฟล์ MyCodeGif.aspx.cs ตอนนี้ไฟล์ MyCodeGif.aspx สืบทอดมาจาก MyCodeGif, App_Web_vf3ukhnv จะเห็นได้ว่า MyCodeGif เป็นคลาสที่กำหนดโดย MyCodeGif.aspx cs. App_Web_vf3ukhnv เป็นชื่อของไฟล์ dll ในโฟลเดอร์ bin หากคุณพยายามเผยแพร่อีกครั้ง จะมีคำถามที่ยุ่งยากมากขึ้น เหตุใดหน้า MyCodeGif.aspx จึงสืบทอดมาจาก MyCodeGif, App_Web_qwdwqd ชื่อแอสเซมบลีที่คอมไพล์แล้วแตกต่างกัน!
2. ความสัมพันธ์ระหว่างเพจและคลาสใน ASP.Net
ใน ASP.Net เพจสามารถสืบทอดจากคลาสและสามารถมีหลายมรดกได้ ตัวอย่างเช่น
ไฟล์เพจ MyCodeGif.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="MyCodeGif.aspx.cs" Inherits="MyCodeGif" %>MyCodeGif.aspx.cs เป็นเช่นนี้
ใช้ระบบ;
ใช้ System.Data;
โดยใช้ระบบการกำหนดค่า;
ใช้ System.Collections;
ใช้ System.Web;
โดยใช้ System.Web.Security;
โดยใช้ System.Web.UI;
ใช้ System.Web.UI.WebControls;
ใช้ System.Web.UI.WebControls.WebParts;
ใช้ System.Web.UI.HtmlControls;
ใช้ FreeCodeNum;
MyCodeGif คลาสสาธารณะบางส่วน: System.Web.UI.Page
-
โมฆะที่ได้รับการป้องกัน Page_Load (ผู้ส่งวัตถุ EventArgs e)
-
//.....ตรรกะ
-
-
จะเห็นได้ว่าหน้า MyCodeGif.aspx สืบทอดมาจากคลาส MyCodeGif
และสามารถสืบทอดด้วยวิธีนี้ได้เช่นกัน
ไฟล์หน้า MyCodeGif.aspx
<%@ ภาษาเพจ = "C#" AutoEventWireup = "true" CodeFile = "MyCodeGif.aspx.cs" สืบทอด = "MyCodeGif" %>
นี่คือลักษณะของ MyCodeGif.aspx.cs
ใช้ระบบ;
ใช้ System.Data;
โดยใช้ระบบการกำหนดค่า;
ใช้ System.Collections;
ใช้ System.Web;
โดยใช้ System.Web.Security;
โดยใช้ System.Web.UI;
ใช้ System.Web.UI.WebControls;
ใช้ System.Web.UI.WebControls.WebParts;
ใช้ System.Web.UI.HtmlControls;
ใช้ FreeCodeNum;
MyCodeGif คลาสสาธารณะบางส่วน: PageBase
-
โมฆะที่ได้รับการป้องกัน Page_Load (ผู้ส่งวัตถุ EventArgs e)
-
//.....ตรรกะ
-
-
PageBase.cs ถูกใจสิ่งนี้
ใช้ระบบ;
ใช้ System.Web;
ใช้ System.Collections;
/**////// <summary>
/// คำอธิบายโดยย่อของ PageBase
/// </สรุป>
PageBase คลาสสาธารณะ: System.Web.UI.Page
-
สาธารณะเพจเบส()
{
}
-
เช่นเดียวกับไฟล์หน้า MyCodeGif.aspx ของฉัน ฉันก็สามารถทำได้เช่นกัน
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="MyCodeGif.aspx.cs" Inherits="PageBase" %>นั่นคือ เพจสืบทอดโดยตรงจากคลาส PageBase
สรุป: เพจ ASP.Net สามารถสืบทอดจากคลาสย่อยแบบขยาย [สืบทอดมาจากคลาสพาเรนต์ของคลาส System.Web.UI.Page]
3. วิธีแก้ไข: คุณยังสามารถปรับแต่งชื่อแอสเซมบลีใน VS2005 ได้ นั่นคือ เมื่อสร้างเวลาโครงการ ไม่ใช่เวลาเว็บไซต์ กล่าวอีกนัยหนึ่ง หลังจากเขียนเว็บไซต์ที่คุณสร้างแล้ว คุณสามารถสร้างโปรเจ็กต์ใหม่แล้วคอมไพล์โค้ดของเว็บไซต์ใหม่ได้ คุณอาจต้องเปลี่ยนการสืบทอดของไฟล์ aspx หลังจากเสร็จสิ้น แต่คุณอาจไม่จำเป็นต้องเปลี่ยนมัน ขึ้นอยู่กับว่าคุณบันทึกมันอย่างไร เนื่องจากการสืบทอดของไฟล์ aspx จะเกี่ยวข้องกับชื่อคลาสเท่านั้น (ถ้ามี เนมสเปซต้องระบุเนมสเปซด้วย) ไฟล์เพจ MyCodeGif.aspx สามารถเปลี่ยนได้
<%@ ภาษาเพจ = "C #" AutoEventWireup = "true" สืบทอด = "PageBase" %>
ลบ CodeFile="MyCodeGif.aspx.cs" ที่อยู่ข้างใน
ด้วยวิธีนี้เว็บไซต์จึงสามารถเผยแพร่ได้ในลักษณะเดียวกับ VS2003 กระบวนการนี้อาจซับซ้อนเล็กน้อย แต่ฉันคิดว่ามันค่อนข้างมีประโยชน์สำหรับการบำรุงรักษาในภายหลัง ท้ายที่สุดแล้ว ฉันคุ้นเคยกับ VS2003 และฉันสามารถทำโปรแกรมที่ไม่มีการจำลองเสมือนได้เช่นเดียวกับในปี 2003
ข้อความที่สมบูรณ์ หวังว่ามันจะมีประโยชน์กับทุกคน
ผู้แต่ง: Xie Ping, Sunset Track 27-5-2549