โฟลเดอร์รหัสที่ใช้ร่วมกันในเว็บไซต์ asp.net
หากเว็บแอปพลิเคชันของคุณมีโค้ดที่คุณต้องการแชร์ในหลาย ๆ หน้า คุณสามารถบันทึกโค้ดลงในไฟล์ในโฟลเดอร์พิเศษสองโฟลเดอร์ (โฟลเดอร์ Bin และโฟลเดอร์ App_Code) ในไดเร็กทอรีรากของเว็บแอปพลิเคชัน Clamped เมื่อคุณสร้างโฟลเดอร์เหล่านี้และจัดเก็บไฟล์ประเภทเฉพาะไว้ในนั้น ASP.NET จะจัดการไฟล์เหล่านั้นด้วยวิธีพิเศษ
โฟลเดอร์ Bin คุณสามารถจัดเก็บแอสเซมบลีที่คอมไพล์แล้วในโฟลเดอร์ Bin และโค้ดอื่นๆ (เช่น โค้ดเพจ) ที่ใดก็ได้ในแอปพลิเคชันเว็บจะอ้างอิงโฟลเดอร์โดยอัตโนมัติ ตัวอย่างทั่วไปคือโค้ดที่คอมไพล์แล้วสำหรับคลาสแบบกำหนดเอง คุณสามารถคัดลอกแอสเซมบลีที่คอมไพล์แล้วลงในโฟลเดอร์ Bin ของแอปพลิเคชันเว็บของคุณ เพื่อให้เพจทั้งหมดสามารถใช้คลาสนี้ได้
ไม่จำเป็นต้องลงทะเบียนแอสเซมบลีในโฟลเดอร์ Bin ตราบใดที่มีไฟล์ .dll อยู่ในโฟลเดอร์ Bin ASP.NET จะจดจำไฟล์นั้นได้ หากคุณเปลี่ยนไฟล์ .dll และเขียนเวอร์ชันใหม่ลงในโฟลเดอร์ Bin ASP.NET จะตรวจพบการอัปเดตและใช้ไฟล์ .dll เวอร์ชันใหม่สำหรับการร้องขอเพจใหม่ในภายหลัง
การรักษาความปลอดภัยของโฟลเดอร์ Bin การวางแอสเซมบลีที่คอมไพล์แล้วในโฟลเดอร์ Bin ก่อให้เกิดความเสี่ยงด้านความปลอดภัย หากคุณเขียนและคอมไพล์โค้ดด้วยตัวเอง คุณจะรู้ว่าโค้ดนั้นทำอะไร อย่างไรก็ตาม คุณต้องปฏิบัติต่อโค้ดที่คอมไพล์แล้วในโฟลเดอร์ Bin เช่นเดียวกับโค้ดที่ปฏิบัติการได้ ควรระมัดระวังเกี่ยวกับโค้ดที่คอมไพล์แล้วจนกว่าคุณจะทดสอบและมั่นใจว่าคุณเข้าใจฟังก์ชันการทำงานของโค้ดแล้ว
โปรดทราบว่าประเด็นด้านความปลอดภัยต่อไปนี้เกี่ยวข้องกับการวางโค้ดที่คอมไพล์ไว้ในโฟลเดอร์ Bin หรือไม่:
แอสเซมบลีในโฟลเดอร์ Bin ถูกกำหนดขอบเขตไว้ที่แอปพลิเคชันปัจจุบัน ดังนั้นพวกเขาจึงไม่สามารถเข้าถึงทรัพยากรภายนอกแอปพลิเคชันเว็บปัจจุบันหรือรหัสการโทรภายนอกแอปพลิเคชันเว็บปัจจุบันได้
ในขณะดำเนินการ ระดับการเข้าถึงของแอสเซมบลีจะถูกกำหนดโดยระดับความน่าเชื่อถือที่ระบุบนเครื่องคอมพิวเตอร์ สำหรับข้อมูลเพิ่มเติม โปรดดูที่ระดับความน่าเชื่อถือของ ASP.NET และไฟล์นโยบาย
หากคุณใช้ตัวออกแบบเช่น Visual Studio โค้ดในโฟลเดอร์ Bin จะทำงานในบริบทที่แตกต่างจากตอนที่รัน ตัวอย่างเช่น โค้ดอาจทำงานด้วยความน่าเชื่อถือเต็มที่
โฟลเดอร์ App_Code คุณสามารถจัดเก็บซอร์สโค้ดไว้ในโฟลเดอร์ App_Code ซึ่งจะถูกคอมไพล์โดยอัตโนมัติในขณะรันไทม์ รหัสอื่นๆ ในเว็บแอปพลิเคชันสามารถเข้าถึงแอสเซมบลีผลลัพธ์ได้ ดังนั้นโฟลเดอร์ App_Code จึงทำงานเหมือนกับโฟลเดอร์ Bin มาก ยกเว้นว่าคุณสามารถจัดเก็บซอร์สโค้ดไว้ในนั้นแทนโค้ดที่คอมไพล์ได้ โฟลเดอร์ App_Code และตำแหน่งพิเศษในเว็บแอปพลิเคชัน ASP.NET ช่วยให้คุณสร้างคลาสที่กำหนดเองและไฟล์ซอร์สโค้ดอื่นๆ เท่านั้น และใช้ในเว็บแอปพลิเคชันของคุณโดยไม่ต้องคอมไพล์แยกกัน
โฟลเดอร์ App_Code สามารถมีไฟล์ซอร์สโค้ดที่เขียนในรูปแบบของไฟล์คลาสดั้งเดิม (นั่นคือ ไฟล์ที่มีนามสกุล .vb, .cs เป็นต้น) อย่างไรก็ตาม มันอาจมีไฟล์ที่ไม่ได้ปรากฏอย่างชัดเจนว่าเขียนในภาษาโปรแกรมเฉพาะ ตัวอย่างได้แก่ ไฟล์ .wsdl (ภาษาคำอธิบายบริการเว็บ) และไฟล์ xml schema (.xsd) ASP.NET สามารถคอมไพล์ไฟล์เหล่านี้เป็นแอสเซมบลีได้
โฟลเดอร์ App_Code สามารถมีไฟล์และโฟลเดอร์ย่อยได้มากเท่าที่คุณต้องการ คุณสามารถจัดระเบียบซอร์สโค้ดของคุณด้วยวิธีใดก็ได้ที่คุณสะดวก และ ASP.NET จะยังคงคอมไพล์โค้ดทั้งหมดเป็นแอสเซมบลีเดียว และแอสเซมบลีนั้นสามารถเข้าถึงได้ด้วยโค้ดอื่นทุกที่ในเว็บแอปพลิเคชัน
สังเกต
ไม่อนุญาตให้ควบคุมผู้ใช้ในโฟลเดอร์ App_Code ซึ่งรวมถึงการควบคุมผู้ใช้ไฟล์เดียวและการควบคุมผู้ใช้ที่ใช้โมเดลโค้ดหลัง การวางการควบคุมผู้ใช้ในไดเร็กทอรี App_Code ทำให้โค้ดการควบคุมผู้ใช้ถูกคอมไพล์ไม่อยู่ในลำดับที่ต้องการ ดังนั้นจึงไม่ได้รับอนุญาต โปรดทราบว่าไม่จำเป็นต้องวางส่วนควบคุมผู้ใช้ไว้ในโฟลเดอร์ App_Code ส่วนควบคุมเหล่านี้มีอยู่แล้วในเพจทุกแห่งในแอปพลิเคชัน
อนุมานภาษาการเขียนโปรแกรมของโฟลเดอร์ App_Code
โฟลเดอร์ App_Code ไม่ได้ถูกทำเครื่องหมายอย่างชัดเจนว่ามีไฟล์ที่เขียนในภาษาการเขียนโปรแกรมอย่างใดอย่างหนึ่ง แต่ ASP.NET จะอนุมานว่าคอมไพเลอร์ใดที่ควรเรียกใช้สำหรับโฟลเดอร์ App_Code ตามไฟล์ที่มีอยู่ ถ้าโฟลเดอร์ App_Code มีไฟล์ .vb ASP.NET จะใช้คอมไพเลอร์ Visual Basic ถ้ามีไฟล์ .cs ASP.NET จะใช้คอมไพเลอร์ C# และอื่นๆ
หากโฟลเดอร์ App_Code มีเฉพาะไฟล์ที่ไม่ได้ระบุภาษาการเขียนโปรแกรมอย่างชัดเจน (เช่น ไฟล์ .wsdl) ASP.NET จะใช้คอมไพเลอร์เริ่มต้นของแอปพลิเคชันเว็บ ซึ่งพบได้ในองค์ประกอบการคอมไพล์ของแอปพลิเคชันเว็บหรือไฟล์การกำหนดค่าคอมพิวเตอร์ Sure .
การใช้ภาษาโปรแกรมหลายภาษาในโฟลเดอร์ App_Code เนื่องจากซอร์สโค้ดในโฟลเดอร์ App_Code ถูกคอมไพล์เป็นชุดเดียว ไฟล์ทั้งหมดในโฟลเดอร์ App_Code จึงต้องเขียนด้วยภาษาโปรแกรมเดียวกัน ตัวอย่างเช่น โฟลเดอร์ App_Code ไม่สามารถมีซอร์สโค้ดที่เขียนทั้งใน Visual Basic และ C#
อย่างไรก็ตาม คุณสามารถกำหนดค่าเว็บแอปพลิเคชันของคุณให้ถือว่าโฟลเดอร์ย่อยของโฟลเดอร์ App_Code เป็นหน่วยที่คอมไพล์แยกกันได้ ด้วยวิธีนี้ แต่ละโฟลเดอร์สามารถมีซอร์สโค้ดที่เขียนด้วยภาษาโปรแกรมที่แตกต่างกันได้ คุณระบุการกำหนดค่านี้โดยการสร้างองค์ประกอบการคอมไพล์ในองค์ประกอบ codeSubDirectories ของไฟล์ Web.config แล้วเพิ่มการอ้างอิงไปยังโฟลเดอร์ย่อย ตัวอย่างต่อไปนี้แสดงวิธีการกำหนดค่าโฟลเดอร์ย่อยชื่อ VBCode และ CSCode เพื่อคอมไพล์เป็นแอสเซมบลีที่แตกต่างกัน:
คัดลอกรหัส
<คอมไพล์ดีบัก = "false">
<codeSubDirectories>
<เพิ่ม directoryName = "VBCode" />
<เพิ่ม directoryName="CSCode" />
</codeSubDirectories>
</compilation>การอ้างอิงถึงโฟลเดอร์ย่อย VBCode และ CSCode ไม่จำเป็นต้องรวมข้อมูลใด ๆ เกี่ยวกับภาษาการเขียนโปรแกรมที่มีอยู่ในโฟลเดอร์ย่อย เช่นเดียวกับโฟลเดอร์ App_Code ASP.NET อนุมานคอมไพเลอร์ที่จะใช้โดยยึดตามไฟล์ในโฟลเดอร์ย่อย
ความปลอดภัยของโฟลเดอร์ App_Code
ปัญหาด้านความปลอดภัยของโค้ดในโฟลเดอร์ App_Code นั้นโดยพื้นฐานแล้วจะเหมือนกับปัญหาด้านความปลอดภัยของโค้ดในโฟลเดอร์ Bin - โค้ดจะถูกคอมไพล์เป็นแอสเซมบลี ณ รันไทม์ สิ่งที่ดีกว่าโฟลเดอร์ Bin คือคุณสามารถอ่านซอร์สโค้ดของไฟล์ในโฟลเดอร์ App_Code ได้ อย่างไรก็ตาม ยังคงมีความเสี่ยงด้านความปลอดภัยหากคุณไม่เข้าใจโค้ดอย่างถ่องแท้ ดังนั้นซอร์สโค้ดในโฟลเดอร์ App_Code จะต้องได้รับการปฏิบัติด้วยความระมัดระวังเช่นเดียวกับโค้ดที่คอมไพล์แล้วซึ่งสร้างจากซอร์สโค้ดเดียวกัน
ตัดตอนมาจาก: http://msdn2.microsoft.com/zh-cn/library/t990ks23(VS.80).aspx
-