สมาชิกที่ลงทะเบียนสร้างฐานข้อมูลการพัฒนาเว็บของคุณคำนำหน้า
ASP.NET ไม่ใช่การอัพเกรด ASP อย่างง่าย แต่เป็นส่วนสำคัญของแผน Microsoft .NET ในการเขียนโปรแกรมหน้าต่างของ Windows ให้อินเทอร์เฟซการเขียนโปรแกรมที่ดีสำหรับการพัฒนาฟังก์ชั่นแอปพลิเคชันเครือข่ายขนาดใหญ่และสามารถปรับปรุงประสิทธิภาพการทำงานของนักพัฒนาได้อย่างมาก
อย่างไรก็ตามกระบวนการ "การแปลงหนึ่งครั้งการรวบรวมสองครั้ง" ทำให้ไฟล์ ASPX ปรากฏขึ้นไม่เพียงพอเล็กน้อยเมื่อการดำเนินการครั้งแรก (หรือการดำเนินการครั้งแรกหลังจากการอัปเดต) โดยเฉพาะอย่างยิ่งในสภาพแวดล้อมแอปพลิเคชันของไฟล์รหัส ASPX และรหัส การรวบรวมไฟล์ ASPX มันถูกเผยแพร่หลังจาก DLL (ใน. NET หรือที่รู้จักกันในชื่อชุดแอปพลิเคชัน) โดยกำจัดเวลาของการแปลงหนึ่งครั้งการรวบรวมหนึ่ง "และอัตราการใช้งาน CPU ซึ่งจะปรับปรุงประสิทธิภาพโดยรวมของบริการเว็บอย่างมาก แน่นอนว่าหลังจากถูกรวบรวมเป็น DLL ความลับของซอร์สโค้ดได้ดีขึ้นในระดับหนึ่ง
บทความนี้แนะนำกระบวนการประมวลผลพื้นฐานของ ASP.NET และการวิเคราะห์การค้นพบที่เป็นความลับ "" Trap "รวบรวมไฟล์ ASPX ที่มีอยู่ด้วยไฟล์ ASPX ของ CodebEhind ลงในกระบวนการ DLL ในตอนท้ายของบทความจะมีการแนะนำเคล็ดลับสำหรับกระบวนการดำเนินการจริง
เนื่องจากบทความนี้เกี่ยวข้องกับแนวคิดเช่นแอปพลิเคชัน ASP.NET, การรวบรวมบรรทัดคำสั่ง, ไฟล์การกำหนดค่า web.config ฯลฯ เพื่อให้ผู้อ่านเข้าใจเนื้อหาของบทความนี้ได้ดีขึ้นและทำให้บทความนี้ดูไม่ได้สะสมอีกต่อไป ก่อนอื่นระบบทั้งหมดที่สอดคล้องกับบทความนี้บทความนี้สอดคล้องกับระบบที่สอดคล้องกันของบทความนี้
สภาพแวดล้อมของระบบ:
Win2000 (SP3) + IIS5 + .NET Framework 1.0 (เวอร์ชันภาษาจีน)
ชื่อเซิร์ฟเวอร์:
เนื่องจากตัวอย่างของบทความนี้ได้รับการทดสอบในเครื่องนี้ชื่อเซิร์ฟเวอร์จึงเป็น localhost
การตั้งค่า IIS:
สร้างไดเรกทอรีเสมือนจริง dlltest (เส้นทางจริงคือ w:/wwwroot/dlltest) และตั้งค่าเป็นแอปพลิเคชันเพื่อสร้างไดเรกทอรีถังขยะภายใต้ dlltest ไฟล์ต้นฉบับทั้งหมดจะถูกวางไว้ในไดเรกทอรี DLLTest และไฟล์ DLL ทั้งหมดจะถูกวางไว้ในไดเรกทอรี DLLTEST/BIN
ไฟล์กำหนดค่าแอปพลิเคชัน asp.net -web.config
สร้างไฟล์ web.config ในไดเรกทอรี dlltest
<?
<การกำหนดค่า>
<system.web />
</การกำหนดค่า>
หน้าต่างคำสั่ง (หน้าต่าง DOS)
เปิดหน้าต่างคำสั่งและใช้คำสั่ง cd เพื่อสร้างไดเรกทอรีปัจจุบันเป็น w:/wwwroot/dlltest
1. สร้างการทำแผนที่จาก ASPX เป็น DLL
ก่อนอื่นมาดูกันว่าไฟล์ ASPX ถูกประมวลผลโดย ASP.NET อย่างไร:
เมื่อคำขอ http (เช่น "http: //webserver/webapp/webpage.aspx") จะถูกส่งจากไคลเอนต์ไปยังเซิร์ฟเวอร์ IIS IIS จะจับและวิเคราะห์คำขอและเมื่อวิเคราะห์คำขอนี้เป็นหน้า ASPX ทันที ใช้หน้า ASPX เพื่อใช้หน้า ASPX ทันที WebApp/WebPaage.aspx "มีอยู่ถ้าไม่มีอยู่ให้กลับไปที่ไคลเอนต์และกลับไปที่ข้อผิดพลาด HTTP 404 (ไม่พบไฟล์) มิฉะนั้นจะค้นหาไฟล์ DLL ที่เกี่ยวข้องในไดเรกทอรีชั่วคราวของ ASP.NET หากไม่มีอยู่จริง หรือ DLL คือ "เก่า" กว่าไฟล์ ASPX แหล่งที่มาให้เรียกคอมไพเลอร์ CSC (หากสคริปต์บริการ ASPX ของสคริปต์ด้านบริการของ ASPX ภาษาคือ VB หรือ JScript จากนั้นเรียกคอมไพเลอร์ VBC ที่เกี่ยวข้อง JSC คอมไพเลอร์) เพื่อรวบรวม ไฟล์ ASPX ลงใน DLL จากนั้น ASP.NET เรียก DLL เพื่อจัดการคำขอลูกค้าเฉพาะและกลับไปที่การตอบกลับเซิร์ฟเวอร์
สามารถเห็นได้จากกระบวนการประมวลผลนี้ ดังนั้นมีวิธีอื่นในการบังคับให้ประมวลผล "เส้นทาง" ไปยังไฟล์ ASPX ไปยัง DLL ที่รวบรวมหรือไม่? วิธีการคือการเพิ่ม ASPX ไปยังรายการการแมป DLL ในส่วน HTTPHANDLERS ของส่วน System.WEB ของส่วน System.WEB ในแอปพลิเคชัน ASP.NET
<dd verb =* path = aspx ชื่อไฟล์ประเภท = ชื่อคลาส, ไฟล์ dll/>
ไฟล์ ASPX: ชื่อเสมือนจริงของ "การกำหนดเส้นทาง" เป็นสิ่งจำเป็นและส่วนขยายจะต้องเป็น ASPX มิฉะนั้น IIS จะประมวลผลไฟล์ก่อนที่สภาพแวดล้อมที่ใช้ ASP.NET
ไฟล์ DLL: ชื่อไฟล์ dll (ชุดแอปพลิเคชัน) ไม่จำเป็นต้องป้อน ".dll" ASP.NET ค้นหาแอสเซมบลี DLL ก่อนในแอปพลิเคชันของแอปพลิเคชันสำหรับแอปพลิเคชันของแอปพลิเคชันจากนั้นค้นหาแอสเซมบลี DLL ในแคชชุดแคช
ชื่อคลาส: เนื่องจาก DLL หนึ่งชื่ออาจมีหลายชื่อหรือหลายคลาสซึ่งคลาสใดจะต้องโหลดโดยอัตโนมัติเมื่อเรียก DLL
ตัวอย่างเช่นไฟล์ web.config ของแอปพลิเคชัน ASP.NET บางตัวมีดังนี้:
<?
<การกำหนดค่า>
<System.web>
<httphandler>
<dd verb =* path = index.aspx type = bbs.indexpage, bbs />
</httphandler>
</ssystem.web>
</การกำหนดค่า>
ไฟล์การกำหนดค่าจะบอก ASP.NET ว่าเมื่อไคลเอนต์ร้องขอไฟล์ index.aspx ของแอปพลิเคชันนี้จะเรียก BBS.dll โดยตรงในไดเรกทอรี Application Bin และโหลดคลาส BBS.IndexPage โดยอัตโนมัติ
2. การพัฒนาสามารถจัดการ DLL ของหน้า HTML
ควรชี้ให้เห็นว่าไม่มีแอปพลิเคชันทั้งหมด DLL ที่สามารถใช้โหมดการร้องขอ/ตอบกลับ HTTP ได้ ลองมาดูคำอธิบายของ "โปรแกรมประมวลผล http และโรงงาน" ในการสอน Microsoft asp.net Fast Entry (http://chs.gotdotnet.com/quickstart/aspplus/):
ASP.NET ให้การร้องขอ/ตอบสนองระดับต่ำช่วยให้นักพัฒนาสามารถใช้คลาส. NET Framework เพื่อให้บริการสำหรับคำขอ HTTP ที่แนะนำ ด้วยเหตุนี้นักพัฒนาจำเป็นต้องสร้างคลาสที่รองรับอินเทอร์เฟซ System.web.ihttphandler และใช้วิธี ProcessRequest () เมื่อการประมวลผลคำขอ HTTP ไม่จำเป็นต้องใช้บริการที่จัดทำโดยเฟรมเวิร์กหน้าระดับสูงโปรแกรมการประมวลผลมักจะมีประโยชน์ การใช้งานร่วมกันของโปรแกรมการประมวลผลรวมถึงตัวคัดกรองและแอปพลิเคชันที่คล้ายกับ CGI โดยเฉพาะแอปพลิเคชันที่ส่งคืนข้อมูลไบนารี
คำขอแต่ละครั้งจากคำขอ HTTP ที่ได้รับจาก ASP.NET จะได้รับการจัดการโดยอินสแตนซ์เฉพาะของคลาสที่ใช้ ihttPhandler ihttphandlerfactory จัดเตรียมโครงสร้างที่ประมวลผลการวิเคราะห์จริงของคำขอ URL อินสแตนซ์ของ IHTTTPHANDLER นอกเหนือจากคลาส IHTTTPHandlerFactory เริ่มต้นที่จัดทำโดย ASP.NET แล้วนักพัฒนายังสามารถเลือกที่จะสร้างและลงทะเบียนโรงงานเพื่อรองรับการวิเคราะห์คำขอจำนวนมากและโซลูชันการเปิดใช้งาน
จะเห็นได้จากข้อความนี้ว่าเมื่อหน้า ASPX ไม่เกี่ยวข้องกับเทคโนโลยีอินเตอร์เฟสขั้นสูงที่จัดทำโดย. NET Framework (เช่นแคชข้อมูลการเก็บรักษาสถานะการอ้างอิงการควบคุมหน้าต่างเว็บ ฯลฯ ) โดยเฉพาะอย่างยิ่งเมื่อส่งคืนข้อมูลไบนารี (เช่น เป็นรูปภาพเสียง ฯลฯ ) ไปยังไคลเอน Interface System.web.ihttPhandler และใช้เมธอด ProcessRequest () ตัวอย่างง่ายๆคือดังนี้:
/* ไฟล์ต้นฉบับ: ex1.cs เริ่ม*/
ใช้ System.web;
เนมสเปซ dlltenst
-
-
คลาสจะต้องใช้อินเทอร์เฟซ ihttphandler หากโปรแกรมจะเข้าถึงสถานะเซสชันจะต้องใช้อินเทอร์เฟซ IrequiressessionState (อินเตอร์เฟสเครื่องหมายที่ไม่รวมวิธีใด ๆ )
-
Public Class EX1PAGE: ihttphandler
-
-
แอตทริบิวต์ Isreusable บอกกับ. NET Framework ว่าโปรแกรมนี้สามารถใช้งานได้หลายเธรดในเวลาเดียวกัน
จริงสอดคล้องกัน;
-
บูลสาธารณะไม่สามารถใช้งานได้
-
รับ {return true;}
-
-
ใช้วิธี ProcessRequest และส่งคืนข้อมูลการตอบกลับไปยังลูกค้า
ในตัวอย่างนี้ส่งคืนหน้า HTML แบบง่าย ๆ ไปยังไคลเอนต์
-
โมฆะสาธารณะ ProcessRequest (บริบท httpContext)
-
httpresponse res = context.response;
res.write (<html> <body>);
res.write (<H1> dllTest -EX1 (ตัวอย่าง 1) </h1> <hr>);
res.write (หน้านี้จัดการโดยตรงโดย DLL);
res.write (</html> </body>);
-
-
-
/* ไฟล์ต้นฉบับ: ex1.cs End*/
ในสถานะบรรทัดคำสั่งคำสั่งรวบรวมต่อไปนี้รวบรวม ex1.cs ลงใน ex1.dll และเก็บไว้ในไดเรกทอรี bin
CSC /T: Library /oxin/ex1.dll ex1.cs
เพิ่ม ASPX-> DLL Mapping ไปยังไฟล์กำหนดค่า web.config
<?
<การกำหนดค่า>
<System.web>
<httphandler>
<ded verb =* path = dlltest1.aspx type = dlltest.ex1Page, ex1 />
</httphandler>
</ssystem.web>
</การกำหนดค่า>
ตอนนี้เมื่อเบราว์เซอร์เยี่ยมชม http: //localhost/dlltest/dlltest1.aspx จริง ๆ แล้วเป็นวิธีการ processretrequest ของคลาส dlltest.ex1page ใน ex1.dll
ประการที่สามรวบรวมไฟล์ ASPX เดียวลงใน DLL
ตัดสินจาก "ความหมายนอก Microsoft" ที่อธิบายไว้ต่อสาธารณะในส่วนก่อนหน้า Microsoft ไม่สนับสนุนนักพัฒนาซอฟต์แวร์ในการรวบรวมไฟล์ ASPX โดยตรงลงใน DLL อย่างไรก็ตามเทคโนโลยีอินเตอร์เฟสขั้นสูงของ ASP.NET (การควบคุม HTML เซิร์ฟเวอร์, การควบคุมเว็บ ฯลฯ ) จำเป็นต้องแสดงผ่านไฟล์ ASPX . ของ.
ตอนนี้สงบลงเพื่อวิเคราะห์:
คอมไพเลอร์ CSC เป็นเพียงคอมไพเลอร์ภาษา C#เท่านั้น ไฟล์แหล่งที่มา
ดังนั้นเพื่อที่จะรวบรวมไฟล์ ASPX ลงในไฟล์ DLL ไฟล์ ASPX จะต้องถูกแปลงเป็นไฟล์แหล่ง CS ที่สามารถรับรู้ได้โดยคอมไพเลอร์ CSC ดังนั้นเครื่องมือใดที่ใช้ในการแปลง? แม้ว่าฉันจะเชื่อว่าเครื่องมือนี้จะต้องถูกซ่อนไว้ในกรอบ .nt แต่ฉันตรวจสอบเอกสารสาธารณะและคู่มืออ้างอิง. NET และคู่มืออ้างอิง. NET จำนวนมาก
โอ้ไม่มีทางไปทั่วโลกและโอกาสโดยบังเอิญยังคงทำให้ฉันค้นพบความลับนี้
ดูไฟล์ต้นฉบับ ex2.aspx:
/* ไฟล์ต้นฉบับ: ex2.aspx start*/
< %@ Page Language = C# %>
<script runat = เซิร์ฟเวอร์>
-
คุณอ่านถูกต้องบรรทัดถัดไปคือ "abcdefg"
ในข้อความฉันเรียกบรรทัดนี้ "กับดักรหัส"
-
ABCDEFG // กับดักรหัส
เป็นโมฆะ page_load (วัตถุ SRC, EventArgs args)
-
if (! isPostBack) notLabel.Text = โปรดป้อนชื่อของคุณ:;
-
เป็นโมฆะ onnamesubmit (Object SRC, EventArgs args)
-
ชื่อสตริง = f_name.value;
notlabel.text = (ชื่อ ==)? ยินดีต้อนรับ! -
-
</script>
<html>
<body>
<form runat = เซิร์ฟเวอร์>
<H1> dllTest -EX2 (ตัวอย่าง 2) </h1>
<Hr>
<ASP: LABEL RUNAT = SERVER ID = NOTLABEL Style = COLOR: RED;
<อินพุต runat = เซิร์ฟเวอร์ ID = f_name size = 8>
<button runat = เซิร์ฟเวอร์ onserverClick = onNameSubMit> ตกลง </button>
</form>
</body>
</html>
/* ไฟล์ต้นฉบับ: ex2.aspx end*/
หากความคิดเห็นหรือลบรหัส "หรือลบออกไป Ex2.aspx เป็นไฟล์ ASP.NET ที่เรียบง่าย
ตอนนี้เรามาเปิด "กับดัก" แล้วดูว่า ASP.NET กลับมาอีกไหม?
ส่งคืนหน้า "ข้อผิดพลาดในการรวบรวม" และไม่สามารถรวบรวมไฟล์ต้นฉบับรายงานได้ สิ่งที่น่าสนใจคือการเชื่อมโยงหลายมิติที่เรียกว่า "แสดงแหล่งรวบรวมที่สมบูรณ์" ที่ด้านล่างของหน้า ลบส่วนนี้ของ "แหล่งรวบรวมที่สมบูรณ์" และลบข้อมูลหมายเลขบรรทัดก่อนหน้าและสวิตช์รวบรวมอื่น ๆ (ส่วนใหญ่ #line Compile Commands) และปิด "รหัสกับดักรหัส" น่ารักมันลบด้วย) และหลังจากเสร็จ .cs:
/* ไฟล์ต้นฉบับ: ex2_aspx.cs เริ่ม*/
-
จากคำอธิบายด้านล่างจะเห็นได้ว่ามีเครื่องมือที่ไม่หยุดชะงัก
-
// ---------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------- ---------------------------------------------------------- ----------------- ----------------------------- ---------------------------------------
// <Mutogenerate>
// รหัสนี้ถูกสร้างขึ้นด้วยเช่นกัน
// runtime version: 1.0.3705.0
-
// chinges ไปยังไฟล์นี้อาจดูแลพฤติกรรมที่ไม่ถูกต้องและจะหายไปหาก
// รหัสถูกสร้างใหม่
// </autogenerate>
// ---------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------- ---------------------------------------------------------- ----------------- ----------------------------- ---------------------------------------
-
น่าแปลกที่: พื้นที่การตั้งชื่อเป็น ASP จริง ๆ แทน ASPX
ขอแนะนำให้เปลี่ยนชื่อเป็นชื่อที่เหมาะสมสำหรับแอปพลิเคชันเพื่อป้องกันความขัดแย้งในการตั้งชื่อเช่นสำหรับบทความนี้คุณสามารถเปลี่ยนเป็น dlltest
ฉันไม่ได้เปลี่ยนแปลงที่นี่เพื่อให้ทุกคนเห็นรูปลักษณ์ดั้งเดิม
-
เนมสเปซ ASP {
ใช้ระบบ
ใช้ System.collections;
การใช้ System.collections.specialized;
ใช้ System.Configuration;
ใช้ System.Text;
การใช้ System.Text.RegulArexpressions;
ใช้ System.web;
ใช้ System.web.caching;
ใช้ System.web.sessionstate;
ใช้ System.web.security;
ใช้ system.web.ui;
ใช้ System.web.ui.webcontrols;
การใช้ System.web.ui.htmlcontrols;
-
1. ให้ความสนใจกับองค์ประกอบของชื่อคลาส
2. ให้ความสนใจกับชั้นเรียนฐาน System.web.ui.Page ใช้อินเทอร์เฟซ ihttphandler
-
คลาสสาธารณะ EX2_ASPX: System.web.ui.Page, System.web.sessionstate.irequiressenerationState {
INT แบบคงที่ส่วนตัว __AUTOHANDLER;
Protected System.web.ui.webcontrols.label Notelabel;
Protected System.web.ui.htmlcontrols.htmlinputtext f_name;
Protected System.web.ui.htmlcontrols.htmlbutton __control3;
Protected System.web.ui.htmlcontrols.htmlform __control2;
บูลคงที่ส่วนตัว __Intialized = FALSE;
ระบบคงที่ส่วนตัว. collections.arraylist __filedencies;
/* ตอนนี้คุณสามารถปิด "กับดัก"*/
// abcdefg
เป็นโมฆะ page_load (วัตถุ SRC, EventArgs args)
-
if (! isPostBack) notLabel.Text = โปรดป้อนชื่อของคุณ:;
-
เป็นโมฆะ onnamesubmit (Object SRC, EventArgs args)
-
ชื่อสตริง = f_name.value;
notlabel.text = (ชื่อ ==)? ยินดีต้อนรับ! -
-
/* ฟังก์ชั่นการก่อสร้าง*//
สาธารณะ ex2_aspx () {
System.collections.arraylist การพึ่งพา;
if (asp.ex2_aspx .__ intialize == false) {{
การพึ่งพา = ระบบใหม่ collections.arraylist ();
-
บรรทัดต่อไปนี้ควรมีคำอธิบายประกอบเพื่อให้ DLL กลายเป็นไฟล์อิสระอิสระ
ป้องกันไฟล์ใหม่และเก่าของไฟล์ "การพึ่งพา" เมื่อ DLL กำลังทำงานอยู่
-
//dependencies.add (w: //wwwroot/dlltest/ex2.aspx);
ASP.EX2_ASPX .__ FELEDENDENCIES = การพึ่งพา;
asp.ex2_aspx .__ intialized = true;
-
-
ได้รับการปกป้องแทนที่ int autohandler {
รับ {
return asp.ex2_aspx .__ autohandler;
-
ชุด {
asp.ex2_aspx ._ autohandlers = value;
-
-
Protected System.web.httpage ApplicationInstance {
รับ {
return ((system.web.httpapplication) (this.context.applicationInstance));
-
-
เทมเพลตสตริงการแทนที่สาธารณะแหล่งที่มาไดเรกทอรี {
รับ {
return /dlltest;
-
-
Private System.web.ui.Control __buildControlNotElabel () {
System.web.ui.webcontrols.label __ctrl;
__CTRL = ใหม่ System.web.ui.webcontrols.label ();
this.notLabel = __ctrl;
__CTRL.ID = NOTELABEL;
(System.web.ui.iattributeAccessor) (__ Ctrl)
กลับ __ctrl;
-
Private System.web.ui.Control __buildContolf_name () {{)
System.web.ui.htmlcontrols.htmlinputtext __Ctrl;
__CTRL = ใหม่ System.web.ui.htmlControls.htmlinputText ();
this.f_name = __ctrl;
__ctrl.id = f_name;
__Ctrl.Size = 8;
กลับ __ctrl;
-
Private System.web.ui.Control __buildControl__Control3 () {{)
System.web.ui.htmlcontrols.htmlbutton __ctrl;
__Ctrl = ใหม่ System.web.ui.htmlControls.htmlbutton ();
. __ control3 = __ctrl;
System.web.ui.iparserAccessor __parser = (System.web.ui.iparseraccessor) (__ctrl));
__parser.addparsedsubobject (ใหม่ System.web.ui.literalControl (OK));
__Ctrl.ServerClick += ใหม่ System.EventHandler (this.onnamesubmit);
กลับ __ctrl;
-
Private System.web.ui.Control
System.web.ui.htmlcontrols.htmlform __ctrl;
__CTRL = ใหม่ System.web.ui.htmlControls.htmlform ();
สิ่งนี้ .__ control2 = __ctrl;
System.web.ui.iparserAccessor __parser = (System.web.ui.iparseraccessor) (__ctrl));
__parser.addparsedsubobject (ใหม่ System.web.ui.literalControl (/r/n <H1> dlltest -Ex2 (ตัวอย่าง 2) </h1>/r/n <hr>/r/n)))
. __ buildControlNotelabel () นี้;
__parser.addparsedsubobject (this.notelabel);
__parser.addparsedsubobject (System.web.ui.literalControl (/r/n));
. __ buildContolf_name ();
__parser.addparsedsubobject (this.f_name);
__parser.addparsedsubobject (System.web.ui.literalControl (/r/n));
. __ buildControl__Control3 ();
__parser.addparsedsubobject (นี้. ___ control3);
__parser.addparsedsubobject (System.web.ui.literalControl (/r/n));
กลับ __ctrl;
-
โมฆะส่วนตัว __buildControltree (System.web.ui.Control __ctrl) {
System.web.ui.iparserAccessor __parser = (System.web.ui.iparseraccessor) (__ctrl));
__parser.addparsedsubobject (ใหม่ System.web.ui.literalControl (/r/n/r/n <html>/r/n <body>/r/n));
. __ buildControl__Control2 ();
__parser.addparsedsubobject (นี้. ___ control2);
__parser.addparsedsubobject (ใหม่ System.web.ui.literalControl
-
ได้รับการคุ้มครองการแทนที่โมฆะเฟรมเวิร์กอินทิเชียล () {
. __ buildControltree (นี้);
this.filedencies = asp.ex2_aspx .__ FileDependencies;
this.enableviewstateMac = true;
-
สาธารณะแทนที่ int getTypehashCode () {) {)
กลับ -11574299;
-
-
-
/* ไฟล์ต้นฉบับ: ex2_aspx.cs สิ้นสุด*/
ฉันเชื่อว่าหลังจากวิเคราะห์ไฟล์นี้คุณจะมีความเข้าใจเพิ่มเติมเกี่ยวกับหลักการของการดำเนินงาน ASP.NET (ไม่มีส่วนเกี่ยวข้องกับบทความนี้ที่ไม่มีเหตุผล)
ในสถานะบรรทัดคำสั่งคำสั่งคอมไพล์ต่อไปนี้รวบรวม ex2_aspx.cs ลงใน ex2.dll และเก็บไว้ในไดเรกทอรี bin
CSC /T: Library /oxin/ex2.dll ex2_aspx.cs
เพิ่ม ASPX-> DLL การแมปไปยังไฟล์กำหนดค่า web.config นั่นคือเพิ่มบรรทัดต่อไปนี้ใน httphandlers ในส่วน System.web:
<derb =* path = dlltest2.aspx type = asp.ex2_aspx, ex2 />
ตอนนี้เมื่อเบราว์เซอร์เข้าชม http: //localhost/dlltest/dlltest2.aspx มันเหมือนกับการเข้าถึง ex2.aspx แน่นอนแม้ว่า ex2.aspx ไม่มีอยู่หรือได้รับการอัปเดต แต่ก็จะไม่มีผลกระทบใด ๆ ต่อการเข้าถึงหน้าเว็บเว้นแต่ bin/ex2.dll จะถูกสร้างขึ้นใหม่
ประการที่สี่รวบรวมไฟล์ ASPX ของ CodebEhind ลงใน DLL
สำหรับการรวบรวมไฟล์ ASPX ของ CodebEhind ลงใน DLL หลักการของการแปลงไฟล์ ASPX เป็นไฟล์ CS Source นั้นเหมือนกับด้านบน เป็นไฟล์แหล่ง CS ความแตกต่างคือขั้นตอนเมื่อรวบรวมลงใน DLL: (เพื่อความสะดวกในการเล่าเรื่องสมมติว่าไฟล์อินเทอร์เฟซคือ ex3.aspx ไฟล์ codebehind คือ ex3.aspx.cs และ "แหล่งรวบรวมที่สมบูรณ์" ของ EX3.aspx ถูกเก็บไว้เป็น ex3_aspx.cs))
ขั้นตอนที่ 1: ก่อนอื่นใช้คำสั่งต่อไปนี้เพื่อรวบรวม ex3.aspx.cs เป็น bin/ex3.aspx.cs.dll
CSC /T: Library /oxin/ex3.aspx.cs.dll ex3.aspx.cs
ขั้นตอนที่ 2: ใช้คำสั่งต่อไปนี้เพื่อรวบรวม ex3_aspx.cs เป็น bin/ex3.dll
CSC /T: Library /r:bin/ex3.aspx.cs.dll /out:bin/ex3.dll ex3_aspx.cs
จากนั้นเพิ่ม ASPX-> DLL การแมปไปยังไฟล์กำหนดค่า web.config นั่นคือเพิ่มบรรทัดต่อไปนี้ใน httphandlers ในส่วน System.web:
<เพิ่ม verb =* path = dlltest3.aspx type = asp.ex3_aspx, ex3 />
ตอนนี้เปิดเบราว์เซอร์และเยี่ยมชม http: //localhost/dlltest/dlltest3.aspx
ห้าเคล็ดลับเล็กน้อย
เมื่อตั้งค่า "กับดัก" เพื่อแปลงไฟล์ ASPX เป็นไฟล์แหล่ง CS โดยทั่วไปใช้วิธีการคัดลอกและวางเพื่อบันทึก "แหล่งรวบรวมที่สมบูรณ์" ใน Notepad หรือ Vs.Net หรือสภาพแวดล้อมการพัฒนา ASP.NET อื่น ๆ หลังจากเสร็จสิ้นการเก็บรักษาไฟล์ต้นฉบับ CS
การจัดระเบียบคือการลบข้อมูลหมายเลขบรรทัดของการวางและคำแนะนำการรวบรวม "#line" หากข้อมูลนี้ถูกลบด้วยตนเองมันจะลำบากเกินไป
หนึ่งในเทคนิคที่ฉันใช้คือ: ในสมุดบันทึกให้ใช้วิธีการทดแทนเพื่อจัดระเบียบอย่างรวดเร็ว ใช้/* บรรทัดเพื่อแทนที่บรรทัดทั้งหมดใช้:*/เพื่อแทนที่ทั้งหมด:, ใช้ // #lines lines เพื่อแทนที่ #line ทั้งหมดหลังจากการเปลี่ยนเสร็จสมบูรณ์แล้วให้คำอธิบายประกอบ "รหัสกับดัก" ตั้งค่าการตั้งค่าฟังก์ชั่นโครงสร้างคลาสหลัก ตั้งค่าการตั้งค่าของฟังก์ชั่นตัวสร้างหลักประโยคของ "ไฟล์การพึ่งพา" นั้นมีคำอธิบายประกอบดังนั้นแม้ว่าการตกแต่งจะเสร็จสมบูรณ์