เว็บไซต์คือสิ่งที่คุณปรับใช้กับเว็บเซิร์ฟเวอร์ ASP.NET เช่น IIS เพียงไฟล์และโฟลเดอร์มากมาย ไม่มีอะไรในเว็บไซต์ที่เชื่อมโยงคุณกับ Visual Studio (ไม่มีไฟล์โครงการ) การสร้างรหัสและการคอมไพล์ของหน้าเว็บ (เช่น. aspx, .ascx, .master) จะทำแบบไดนามิกเมื่อรันไทม์และการเปลี่ยนแปลงในไฟล์เหล่านี้ถูกตรวจพบโดยกรอบงานและรวบรวมใหม่โดยอัตโนมัติ คุณสามารถใส่รหัสที่คุณต้องการแชร์ระหว่างหน้าในโฟลเดอร์ App_Code พิเศษหรือคุณสามารถรวบรวมล่วงหน้าและวางแอสเซมบลีในโฟลเดอร์ Bin
Web Applicationเป็นโครงการ Visual Studio พิเศษ ความแตกต่างที่สำคัญกับเว็บไซต์คือเมื่อคุณสร้างโครงการไฟล์โค้ดทั้งหมดจะถูกคอมไพล์ในแอสเซมบลีเดียวซึ่งอยู่ในไดเรกทอรี bin คุณไม่ได้ปรับใช้ไฟล์รหัสกับเว็บเซิร์ฟเวอร์ แทนที่จะมีโฟลเดอร์พิเศษสำหรับไฟล์รหัสที่แชร์คุณสามารถวางไว้ที่ใดก็ได้เช่นเดียวกับที่คุณทำในไลบรารีคลาส เนื่องจากเว็บแอปพลิเคชันมีไฟล์ที่ไม่ได้ตั้งใจจะปรับใช้เช่นโครงการและไฟล์รหัสจึงมีคำสั่งเผยแพร่ใน Visual Studio เพื่อส่งเว็บไซต์ไปยังตำแหน่งที่ระบุ
App_Code vs Bin
การปรับใช้ไฟล์รหัสที่แชร์เป็นความคิดที่ไม่ดี แต่นั่นไม่ได้หมายความว่าคุณต้องเลือก Web Application คุณสามารถมีเว็บไซต์ที่อ้างอิงถึงโครงการห้องสมุดคลาสที่มีรหัสทั้งหมดสำหรับเว็บไซต์ เว็บแอปพลิเคชันเป็นวิธีที่สะดวกในการทำ
codebehind
หัวข้อนี้เป็นไฟล์เฉพาะสำหรับ. aspx และ .ascx หัวข้อนี้มีความเกี่ยวข้องลดน้อยลงในเฟรมเวิร์กแอปพลิเคชันใหม่เช่น ASP.NET MVC และ ASP.NET เว็บเพจที่ไม่ใช้ไฟล์ codebehind
โดยการรวบรวมไฟล์รหัสทั้งหมดไว้ในแอสเซมบลีเดียวรวมถึงไฟล์codebehindของเพจ. aspx และ .ascx ในเว็บแอปพลิเคชันคุณต้องสร้างใหม่สำหรับการเปลี่ยนแปลงเล็กน้อยทุกครั้งและคุณไม่สามารถทำการเปลี่ยนแปลงสดได้ สิ่งนี้อาจเป็นความเจ็บปวดอย่างแท้จริงในระหว่างการพัฒนาเนื่องจากคุณต้องสร้างขึ้นใหม่เพื่อดูการเปลี่ยนแปลงในขณะที่มีการตรวจพบการเปลี่ยนแปลงเว็บไซต์โดยรันไทม์และเพจ / การควบคุมจะถูกคอมไพล์ใหม่โดยอัตโนมัติ
การมีรันไทม์จัดการชุดประกอบ codebehind นั้นใช้งานได้น้อยลงเนื่องจากคุณไม่ต้องกังวลกับการให้หน้า / ควบคุมชื่อที่ไม่ซ้ำกันหรือจัดระเบียบให้เป็นชื่ออื่น
ฉันไม่ได้บอกว่าการปรับใช้ไฟล์รหัสเป็นความคิดที่ดีเสมอ (โดยเฉพาะในกรณีของไฟล์รหัสที่ใช้ร่วมกัน) แต่ไฟล์ codebehind ควรมีเฉพาะรหัสที่ทำงานเฉพาะ UI ตัวจัดการเหตุการณ์ wire-up ฯลฯ แอปพลิเคชันของคุณควรเป็น เลเยอร์เพื่อให้รหัสสำคัญสิ้นสุดในโฟลเดอร์ Bin เสมอ หากเป็นเช่นนั้นการปรับใช้ไฟล์โค๊ดหลังจะไม่ถือว่าเป็นอันตราย
ข้อ จำกัด อีกประการของ Web Applications คือคุณสามารถใช้ภาษาของโครงการได้เท่านั้น ในเว็บไซต์คุณสามารถมีบางหน้าใน C # บางหน้าเป็น VB และอื่น ๆ ไม่จำเป็นต้องรองรับ Visual Studio แบบพิเศษ นั่นคือความงามของความสามารถในการขยายตัวของผู้ให้บริการ
นอกจากนี้ในเว็บแอปพลิเคชันคุณจะไม่ได้รับการตรวจจับข้อผิดพลาดในหน้า / การควบคุมเนื่องจากคอมไพเลอร์รวบรวมเฉพาะคลาสของคุณเท่านั้นและไม่ใช่รหัสมาร์กอัป (ใน MVC คุณสามารถแก้ไขได้โดยใช้ตัวเลือก MvcBuildViews)
Visual Studio
เนื่องจากเว็บแอปพลิเคชันเป็นโครงการ Visual Studio คุณจะได้รับคุณสมบัติบางอย่างที่ไม่สามารถใช้ได้ในเว็บไซต์ ตัวอย่างเช่นคุณสามารถใช้ build events เพื่อทำงานที่หลากหลายเช่นลดขนาดและ / หรือรวมไฟล์ Javascript
ฟีเจอร์ที่ดีอีกอย่างที่แนะนำใน Visual Studio 2010 คือการแปลง Web.configการเปลี่ยนแปลงสิ่งนี้ยังไม่สามารถใช้ได้ในเว็บไซต์ ตอนนี้ทำงานร่วมกับเว็บไซต์ใน VS 2013
การสร้างแอปพลิเคชันเว็บเร็วกว่าการสร้างเว็บไซต์โดยเฉพาะสำหรับไซต์ขนาดใหญ่ นี่เป็นสาเหตุหลักเนื่องจากเว็บแอปพลิเคชันไม่ได้รวบรวมรหัสมาร์กอัป ใน MVC ถ้าคุณตั้งค่า MvcBuildViews เป็นจริงมันจะรวบรวมรหัสมาร์กอัปและคุณได้รับการตรวจจับข้อผิดพลาดซึ่งมีประโยชน์มาก ข้อเสียคือทุกครั้งที่คุณสร้างโซลูชันมันจะสร้างเว็บไซต์ที่สมบูรณ์ซึ่งอาจช้าและไม่มีประสิทธิภาพโดยเฉพาะถ้าคุณไม่ได้แก้ไขไซต์ l พบว่าตัวเองกำลังเปิดและปิด MvcBuildViews (ซึ่งต้องมีการยกเลิกการโหลดโครงการ) ในอีกทางหนึ่งกับเว็บไซต์ที่คุณสามารถเลือกได้ว่าคุณต้องการสร้างเว็บไซต์เป็นส่วนหนึ่งของการแก้ปัญหาหรือไม่ หากคุณเลือกที่จะไม่ทำสิ่งนั้นก็คือการสร้างโซลูชันนั้นรวดเร็วมากและคุณสามารถคลิกที่โหนดเว็บไซต์และเลือก Build หากคุณทำการเปลี่ยนแปลง
ในโครงการ MVC Web Application คุณมีคำสั่งและไดอะล็อกพิเศษสำหรับงานทั่วไปเช่น 'เพิ่มมุมมอง', 'ไปที่มุมมอง', 'เพิ่มตัวควบคุม' ฯลฯ ไม่สามารถใช้งานได้ในเว็บไซต์ MVC
ถ้าคุณใช้ IIS Express เป็นเซิร์ฟเวอร์การพัฒนาในเว็บไซต์คุณสามารถเพิ่มไดเรกทอรีเสมือน ตัวเลือกนี้ไม่สามารถใช้ได้ในเว็บแอปพลิเคชัน
NuGet Package Restore ไม่ทำงานบนเว็บไซต์คุณต้องติดตั้งแพ็กเกจด้วยตนเองที่ระบุไว้บน packages.configPackage Restore ตอนนี้ทำงานกับเว็บไซต์ที่เริ่มต้น NuGet 2.7