2009-02-26 39 views
64

thể trùng lặp:
ASP.NET: Web Site or Web Application?Sự khác nhau giữa 'trang web' và 'dự án' trong Visual Studio

tôi đã nhận thấy rằng có rõ ràng là một sự khác biệt trong những gì bạn nhận được khi bạn bắn lên Visual Studio 2008 và chọn 'Dự án mới' -> 'Ứng dụng web ASP.NET' thay vì 'Trang web mới' -> 'Trang web ASP.NET'. Ví dụ: nếu bạn chọn 'Project', thì bạn có thể biên dịch thành .dll và mỗi trang sẽ nhận tệp * .aspx.designer.cs codebehind.

1) Tại sao chúng tôi có hai loại dự án khác nhau này?

2) Bạn thích cái nào hơn?

3) Tại sao tôi chọn cái kia?

4) Thỏa thuận với các tệp * .aspx.designer.cs là gì?

+0

http://stackoverflow.com/questions/590501/difference-between-web-site-and-project-in-visual-studio/590542#590542 –

Trả lời

28

1) Mô hình 'trang web' được giới thiệu với ASP.NET 2.0, mô hình 'ứng dụng web' là loại dự án của khung .net gốc. Cả hai đều có cách sử dụng khác nhau (xem bên dưới).

2) Tùy thuộc vào ngữ cảnh. Một ví dụ tốt là nếu bạn đang bán một sản phẩm phần mềm, bạn có thể muốn sử dụng một dự án 'ứng dụng web' bởi vì nó tự nhiên vay chính nó để mã được biên dịch một cách tự nhiên.

3) Xem ở trên, sở thích cá nhân, đặc điểm bảo trì. Một điều thú vị mà một 'trang web' cho phép bạn làm điều đó có thể khiến bạn gặp nhiều rắc rối là tạo những thay đổi tùy ý đối với tệp mã sau (thường là tệp * .cs hoặc * .vb) trong notepad trong khi trang web đang chạy.

4) Tệp designer.cs được sử dụng để lưu trữ mã được tạo tự động. "Mã này được tạo bởi một công cụ."

+1

"Phương thức 'trang web' đã được giới thiệu với ASP.NET 2.0, mô hình 'ứng dụng web' là 'nguyên bản'. Lúng túng. – annakata

+36

"Mã này được tạo bởi một công cụ." Tôi cười mỗi lần tôi nhìn thấy dòng này. Thật là một công cụ .. – prestomation

+2

Giới thiệu (1): dự án ứng dụng web là dự án được giới thiệu trong VS 2005 thay thế cho Dự án Web của VS 2003. [Xem tại đây] (http://damieng.com/blog/2008/02/07/web-site-vs-web-application). Giới thiệu (3): bạn chỉ có thể thay đổi mã này nếu trang web được xuất bản dưới dạng có thể cập nhật. Nếu không, thậm chí sẽ không có tệp * .cs hoặc * .vb trên trang web đã xuất bản. – Abel

54

Họ có mục đích khác nhau.

Trang web là trang web có nội dung có khả năng thay đổi theo thời gian, đó là bản thân các trang sẽ thay đổi. Không có tệp dự án thực tế và trang web được triển khai đơn giản dưới dạng tập hợp các tệp.

Ứng dụng là trang web nơi nội dung chỉ là ứng dụng, phần động sẽ chủ yếu nằm trong kho lưu trữ lâu dài như cơ sở dữ liệu. Nó sẽ có logic phức tạp hơn vì nó có khả năng biểu diễn một tập các biểu mẫu để nhập dữ liệu nhiều như một phương tiện để kiểm tra nội dung. Nó có một tập tin dự án để kiểm soát chặt chẽ hơn cấu hình của nó và mã của nó được triển khai như một dll biên dịch.

+3

ai đó đã bỏ phiếu này xuống? – annakata

+2

Có thể cần lưu ý rằng bạn có thể chọn giải quyết nhu cầu kinh doanh giống nhau bằng cách sử dụng loại dự án dựa trên sở thích cá nhân. –

+1

@Ian - không thực sự, mô hình trang web có một số nhược điểm ở mức độ kinh doanh và chỉ có lợi nhuận nhỏ. – annakata

3
  1. Lúc đầu, có một dự án ứng dụng web (nó hoạt động tương tự như dự án trang web hiện tại). Họ đã thay đổi nó để phản ánh những gì một số người dùng đã yêu cầu. Tuy nhiên, mọi người lại muốn có chức năng cũ để họ giới thiệu lại dự án trang web hoạt động giống như dự án ứng dụng Web gốc.

  2. I - và nơi làm việc của tôi - thích dự án trang web

  3. Chúng tôi muốn rằng các tập tin của trang web là các tập tin trong hệ thống tập tin (không cần phải thêm chúng bằng tay)

  4. Không có ý tưởng

Dưới đây là hai bài báo tôi thấy về cả hai:

http://damieng.com/blog/2008/02/07/web-site-vs-web-application

http://www.dotnetspider.com/resources/1520-Difference-between-web-site-web-application.aspx

Lưu ý: Rất nhiều các vấn đề với trang web đã được giải quyết với các dự án triển khai Web

Cập nhật: Cố định các điểm 1, ứng dụng Web có đầu tiên

+1

Cách khác xung quanh - Ứng dụng đặt trước Trang web. –

+0

Đây là nghĩa đen nhưng không thực sự đúng. WAP trong 2k3 tương đương với WSP trong 2k5 * không * WAP trong 2k5 SP1.1, đó là cách chúng ta hiểu thuật ngữ. – annakata

+0

Đó là những gì tôi đã nghe, sửa nó. – mbillard

17

Tôi sẽ không lặp lại định nghĩa của 2, vì nó vừa được trả lời.

Vậy tại sao lại sử dụng cái kia?

Trang web cho phép bạn coi nó như một trang web ASP hoặc PHP cổ điển, nơi bạn có thể thực hiện các thay đổi nội tuyến có hiệu lực ngay lập tức.

Ưu

  • Bạn có thể làm cho việc tung ra trang web ngay trên máy chủ web
  • Triển khai đơn giản như việc sao chép thư mục

Nhược điểm

  • Nếu bạn là không thực hiện các thay đổi ngay trên trang web trực tiếp, bạn có thể gặp vấn đề quản lý thay đổi, nơi bạn quên giữ tất cả các bạn r file đồng bộ
  • Bạn có thể nhận các lỗi cú pháp runtime hiển thị cho người dùng cuối, vì cách duy nhất để kiểm tra là để tự chạy mỗi trang

Web Application cho phép bạn đối xử với nó giống như cách bạn sẽ là một máy tính để bàn ứng dụng - có một triển khai được biên dịch trên máy của bạn.

Ưu

  • rõ ràng, quản lý thay đổi cấu trúc. Bạn không thể vô tình trộn mã từ hai phiên bản khác nhau. Điều này có thể quan trọng khi có 2 người tham gia - một người viết mã và một người chịu trách nhiệm đưa các tệp lên máy chủ.

  • Bởi vì bạn biên dịch nó trên máy tính của bạn, mọi thứ đều trở nên cú pháp kiểm tra tại thời điểm đó *

Nhược điểm

  • triển khai là có liên quan sau đó chỉ cần sao chép các thư mục từ sự phát triển của bạn nhiều hơn một chút máy móc. Tuy nhiên, việc sử dụng lệnh "Publish" rất đơn giản hóa quá trình biên dịch và tập hợp những tệp nào sẽ được sao chép vào máy chủ web.

  • Bất kỳ thay đổi cần phải được thực hiện trên máy tính của bạn, biên soạn, và một phiên bản hoàn toàn mới gửi đến máy chủ web *

* Các aspx/file html là kiểm tra chỉ cú pháp nếu bạn bật chức năng này trên trong các tùy chọn xây dựng của bạn. Cũng có thể chỉnh sửa các tệp này trên máy chủ trừ khi chúng được biên dịch vào dự án của bạn.

+0

Đối với loại ứng dụng web, điều gì xảy ra nếu bạn tái xuất bản, ghi đè lên DLL của dự án, trong khi người dùng vẫn còn trên trang web? Tôi cần phải biết điều này cho dự án của tôi, nhưng nó không phải là giá trị một câu hỏi SO mới. – HardCode

+2

Cá nhân tôi không xuất bản trực tiếp lên trang web, thay vào đó tôi sử dụng thư mục dàn dựng. Ghi đè lên DLL gây ra một tạm dừng ngắn, và sau đó yêu cầu tiếp theo đang chạy. Hãy ghi nhớ - cập nhật * khởi động lại * ứng dụng. Đối với các tình huống doanh nghiệp, bạn nên sử dụng gói bảo trì, không cập nhật bất ngờ – David

4

Các trang web là cách .NET gốc năm 2003 để thực hiện việc tạo trang web. Theo kinh nghiệm của tôi, chúng có thể là cực kỳ do thiếu định nghĩa dự án mà chúng không thể sử dụng lại và có vấn đề với mã hóa mô đun, có vấn đề với tích hợp TeamSystem và không gian tên. Liên kết một đối một với một miền và thiếu trừu tượng xuất bản thực sự tạo ra các vấn đề bảo trì xuống dòng.

Cách thức ASP cổ điển "cổ điển" là một vấn đề nghiêm trọng vì nó lại làm suy yếu việc sử dụng lại mã và thử nghiệm, và những lợi ích thường được trích dẫn cho phép sửa lỗi nóng - nếu được gọi - thực sự là một tín hiệu lớn mà bạn có một quá trình phát triển không thành công. Khả năng sửa chữa nóng là tất nhiên tốt hơn là không thể, nhưng đó là một cái gì đó bạn không bao giờ muốn gọi.

Bạn có thể nói rằng các vấn đề với mô hình trang web là đủ lớn để MS cung cấp cho chúng tôi ứng dụng web thay thế. Cá nhân tôi sẽ không bao giờ sử dụng chúng cho bất cứ điều gì ngoài mã demo ... không thực sự tôi thậm chí sẽ không làm điều đó.

+1

Các dự án web là lựa chọn duy nhất trong .Net 1.0 và 1.1. VS 2005 ban đầu đã loại bỏ hoàn toàn các dự án web cho đến khi một số lượng lớn các khiếu nại khuyến khích họ trở lại trong một gói dịch vụ. VS 2008 tiếp tục có các lựa chọn cho cả hai. – TGnat

+1

Nhưng dự án Web trong 1.1 tương đương với trang web 2.0 - nó có nhiều thay đổi tên thành 2.0 (sans SP) hơn bất cứ điều gì khác – annakata

9

3) Dự án ứng dụng web có thể được xây dựng bởi MSBuild. WebSite không phải là (không có nhiều tinh chỉnh). Nếu bạn sử dụng TeamSystem với các bản dựng tự động thì đây là cách để đi.

2

Có rất ít sự khác biệt và tôi khuyên bạn nên sử dụng mô hình Trang web.

Sự khác biệt chính là cho trang web, một số tệp cần được đặt trong một số thư mục nhất định (tệp mã cần được đặt trong thư mục 'App_Code'), bên cạnh đó, nó khá thẳng về phía trước.

Nếu có mã biên dịch để triển khai là quan trọng đối với bạn và bạn muốn có một DLL duy nhất (trái ngược với một số được tạo khi bạn xuất bản bình thường cho trang web), thì bạn sẽ muốn thêm -on: http://msdn.microsoft.com/en-us/asp.net/aa336619.aspx

+3

Đó không phải là 'khác biệt chính', có nhiều sự khác biệt quan trọng hơn được nêu ở đây: http://msdn.microsoft.com/en-us/library/aa730880(VS.80).aspx#wapp%5Ftopic5. Cá nhân tôi nghĩ rằng nó là liều lĩnh để giới thiệu các mô hình trang web cho bất cứ ai, nhưng một sinh viên CS năm đầu tiên hoặc nhà phát triển web nghiệp dư vừa chớm nở. – 5arx

+1

Làm thế nào là nó thiếu thận trọng? Điều duy nhất bạn mất là khả năng sử dụng lại mã ở nơi khác; Tôi đã không bao giờ phát triển một trang web mà tôi cần phải sử dụng mã trong một dự án khác .. Nếu tôi đã làm, mã đó sẽ được trong dự án riêng của nó được chia sẻ bởi cả hai trang web. – John

5

Sự khác biệt lớn nhất mà không ai thực sự đề cập (ngoại trừ Annakata) là với mô hình nơi mọi thứ được biên dịch thành một DLL duy nhất, bạn có toàn quyền kiểm soát các lớp mà ứng dụng của bạn tạo ra. Bạn biết họ đang ở đâu và luôn có thể tham khảo họ từ bất kỳ nơi nào khác trong ứng dụng.

Với mô hình trang đơn, bạn không thể thực hiện việc này. Bạn phải tìm hiểu về nó bằng cách tạo các lớp "sơ khai" trong thư mục AppCode và kế thừa những thứ đó trong các trang của bạn, nhưng thậm chí đó không phải là lý tưởng và thêm độ phức tạp.

Bạn sẽ chỉ thực sự phát triển công cụ này nếu bạn đang cố gắng phát triển một trang web động phức tạp, nơi bạn tự động tải nhiều người dùng điều khiển tại thời gian chạy dựa trên nội dung. Sau đó, sự khác biệt là rõ ràng đau đớn - do đó nhiều phát triển của chúng tôi bị đình trệ trên ASP 1.1 cho đến khi chúng tôi có thể quay trở lại cùng một mô hình sau đó.

Nich

3

Nếu công việc của bạn cần phải tận dụng các tính năng oo ngôn ngữ (phân cấp lớp, không gian tên) hoặc nếu bạn cần phải sử dụng lại mã phổ biến trong các dự án (truy cập dữ liệu, libs lớp vv) thì dự án ứng dụng web là cách duy nhất để đi.

Dự án website (đầu mối là trong tên) chỉ thực sự tốt cho không phức tạp 'brochureware' trang web (nơi các trang bao gồm nội dung tĩnh) như trái ngược với web ứng dụng.

9

Những câu trả lời đơn giản như sau:

  1. trang web mới - tạo mã sau các trang được biên soạn tại máy chủ khi trang được yêu cầu.
  2. Dự án web mới - tạo các trang được biên dịch trước thành một hoặc nhiều cụm (thậm chí toàn bộ trang web) và được triển khai trên máy chủ.

Trường hợp # 1 - Nếu một hacker lấy được tệp mã sau, mọi mật khẩu cơ sở dữ liệu sẽ được hiển thị. Các trang này được biên soạn tại thời điểm chúng được yêu cầu. Bạn có thể chọn biên dịch trước mọi thứ thành một hội đồng lớn. Nếu không, có nhiều tải trên máy chủ.

Trường hợp # 2 - nếu một hacker có được hội đồng của bạn, họ sẽ bị làm xáo trộn. Hội đồng bị xáo trộn khó crack hơn. Các assembly này được biên dịch trước, do đó giảm tải trên máy chủ.

Để biết thêm thông tin:

Introduction to Web Application Projects

5

Nói từ kinh nghiệm với cả hai: "Web Sites" được sử dụng mà không có phương pháp kiểm tra tại chỗ, không có máy chủ CI, và một nền văn hóa khuyến khích và thúc đẩy " cập nhật các trang cụ thể thường xuyên. "Các ứng dụng web" là tiêu chuẩn thực tế khi các phương pháp phần mềm được tuân theo và có thử nghiệm đơn vị (nếu không phải là TDD đầy đủ) và máy chủ CI tập trung viết mã sạch và tìm lỗi trước khi cần "hotfix".

Các vấn đề liên quan