Trang web ASP.NET hay ứng dụng web ASP.NET?


848

Khi tôi bắt đầu một dự án ASP.NET mới trong Visual Studio, tôi có thể tạo một Ứng dụng web ASP.NET hoặc tôi có thể tạo một trang web ASP.NET.

Sự khác biệt giữa ứng dụng web ASP.NET và trang web ASP.NET là gì? Tại sao tôi lại chọn cái này?

Câu trả lời có khác nhau dựa trên phiên bản Visual Studio nào tôi đang sử dụng không?


6
Một so sánh và giải thích đầy đủ và gần đây (cho 4.5) được tìm thấy ở đây tại MSDN: Dự án ứng dụng web so với dự án trang web trong Visual Studio
Gustav

Câu trả lời:


556

Trang mạng:

Các trang web dự án được biên soạn một cách nhanh chóng. Bạn kết thúc với rất nhiều tập tin DLL, đó có thể là một nỗi đau. Nó cũng đưa ra vấn đề khi bạn có các trang hoặc điều khiển trong một thư mục cần tham chiếu các trang và điều khiển trong thư mục khác vì thư mục khác có thể chưa được biên dịch thành mã. Một vấn đề khác có thể là trong xuất bản.

Nếu Visual Studio không được yêu cầu sử dụng lại cùng một tên liên tục, nó sẽ xuất hiện tên mới cho các tệp DLL được tạo bởi các trang mọi lúc. Điều đó có thể dẫn đến việc có một số bản sao gần đúng của các tệp DLL chứa cùng một tên lớp, điều này sẽ tạo ra nhiều lỗi. Dự án trang web được giới thiệu với Visual Studio 2005, nhưng hóa ra nó không phổ biến.

Ứng dụng web:

Các ứng dụng web Dự án đã được tạo ra như là một add-in và bây giờ tồn tại như một phần của SP 1 cho Visual Studio 2005. Sự khác biệt chính là những dự án ứng dụng web được thiết kế để làm việc tương tự như các dự án Web mà vận chuyển với Visual Studio 2003. Nó sẽ biên dịch ứng dụng thành một tệp DLL duy nhất tại thời điểm xây dựng. Để cập nhật dự án, nó phải được biên dịch lại và tệp DLL được xuất bản để thay đổi xảy ra.

Một tính năng hay khác của dự án Ứng dụng Web là loại trừ các tệp khỏi chế độ xem dự án dễ dàng hơn nhiều. Trong dự án Trang web, mỗi tệp mà bạn loại trừ được đổi tên bằng một từ khóa bị loại trừ trong tên tệp. Trong Dự án Ứng dụng Web, dự án chỉ theo dõi những tệp nào sẽ bao gồm / loại trừ khỏi chế độ xem dự án mà không đổi tên chúng, khiến mọi thứ trở nên gọn gàng hơn nhiều.

Tài liệu tham khảo

Bài viết ASP.NET 2.0 - Dự án trang web và ứng dụng web cũng đưa ra lý do tại sao nên sử dụng cái này mà không phải cái kia. Đây là một đoạn trích của nó:

  • Bạn cần di chuyển các ứng dụng Visual Studio .NET 2003 sang VS 2005? sử dụng dự án Ứng dụng web.
  • Bạn muốn mở và chỉnh sửa bất kỳ thư mục nào dưới dạng dự án Web mà không tạo tệp dự án? sử dụng dự án trang web.
  • Bạn cần thêm các bước xây dựng trước và sau xây dựng trong quá trình biên dịch? sử dụng dự án Ứng dụng web.
  • Bạn cần xây dựng một ứng dụng Web bằng nhiều dự án Web? sử dụng dự án Ứng dụng web.
  • Bạn muốn tạo một hội đồng cho mỗi trang? sử dụng dự án trang web.
  • Bạn thích biên dịch động và làm việc trên các trang mà không xây dựng toàn bộ trang trên mỗi lượt xem trang? sử dụng dự án trang web.
  • Bạn thích mô hình mã một trang hơn mô hình mã phía sau? sử dụng dự án trang web.

Dự án ứng dụng web so với dự án trang web (MSDN) giải thích sự khác biệt giữa trang web và dự án ứng dụng web. Ngoài ra, nó thảo luận về cấu hình sẽ được thực hiện trong Visual Studio.


5
Bạn vẫn có thể biên dịch toàn bộ trang web của mình thành một dll với Trang web dựa trên tệp.
dtc

31
Cách tôi có xu hướng nghĩ về nó. Nếu bạn đang lập trình một ứng dụng tình cờ sử dụng HTML làm UI thì hãy sử dụng Ứng dụng web. Nếu bạn có một trang web tình cờ cần một chút Asp.net trên một vài trang của nó, hãy sử dụng Dự án Trang web.
Ian Ringrose

35
Trên thực tế, các dự án ứng dụng web chính xác là loại dự án ASP.NET ban đầu. Chúng không "giống" các dự án chúng tôi có trong Visual Studio 2003. Chúng không được tạo như một bổ trợ. Visual Studio 2005 SP1 chỉ đơn giản là khôi phục những gì Visual Studio 2005 RTM đã xóa nhầm.
John Saunders

1
Bạn có thể sử dụng đầu ra WebApplication trong dự án WebDeployment. Bạn không thể sử dụng đầu ra WebSite trong dự án WebDeployment. Nếu bạn muốn tạo một dự án Triển khai, hãy bám vào WebApplication. Nhưng để phát triển, WebSite thuận tiện hơn. Tuy nhiên, chuyển đổi không phải lúc nào cũng có vấn đề, vì vậy hãy bắt đầu với WebApplication ngay lập tức.
Stefan Steiger

8
@xarzu: "dự án" trang web không có tệp .csproj hoặc .vbproj. Chúng không thực sự là dự án - chúng chỉ là các thư mục chứa đầy các tệp.
John Saunders

171

Trang web là những gì bạn triển khai đến một máy chủ web ASP.NET như IIS. Chỉ cần một loạt các tập tin và thư mục. Không có gì trong một trang web liên kết bạn với Visual Studio (không có tệp dự án). Việc tạo mã và biên dịch các trang web (như .aspx, .ascx, .master) được thực hiện một cách linh hoạt khi chạy và các thay đổi đối với các tệp này được phát hiện bởi khung và tự động biên dịch lại. Bạn có thể đặt mã mà bạn muốn chia sẻ giữa các trang trong thư mục App_Code đặc biệt hoặc bạn có thể biên dịch trước mã đó và đặt cụm trong thư mục Bin.

Ứng dụng web là một dự án Visual Studio đặc biệt. Sự khác biệt chính với các trang web là khi bạn xây dựng dự án, tất cả các tệp mã được biên dịch thành một tập hợp duy nhất, được đặt trong thư mục bin. Bạn không triển khai các tệp mã đến máy chủ web. Thay vì có một thư mục đặc biệt cho các tệp mã được chia sẻ, bạn có thể đặt chúng ở bất cứ đâu, giống như bạn sẽ làm trong thư viện lớp. Vì Ứng dụng web chứa các tệp không được triển khai, chẳng hạn như tệp dự án và mã, nên có lệnh Xuất bản trong Visual Studio để xuất Trang web đến một vị trí đã chỉ định.

App_Code vs Bin

Triển khai các tệp mã được chia sẻ nói chung là một ý tưởng tồi, nhưng điều đó không có nghĩa là bạn phải chọn Ứng dụng Web. Bạn có thể có một Trang web tham chiếu dự án thư viện lớp chứa tất cả mã cho Trang web. Ứng dụng web chỉ là một cách thuận tiện để làm điều đó.

Mã ẩn

Chủ đề này dành riêng cho các tệp .aspx và .ascx. Chủ đề này có liên quan nhẹ nhàng trong các khung ứng dụng mới, chẳng hạn như các trang web ASP.NET MVC và ASP.NET không sử dụng các tệp mã.

Bằng cách có tất cả các tệp mã được biên dịch thành một tập hợp duy nhất, bao gồm các tệp của các trang .aspx và các điều khiển .ascx, trong Ứng dụng web, bạn phải xây dựng lại cho mỗi thay đổi nhỏ và bạn không thể thực hiện thay đổi trực tiếp. Đây có thể là một nỗi đau thực sự trong quá trình phát triển, vì bạn phải tiếp tục xây dựng lại để xem các thay đổi, trong khi với các thay đổi Trang web được phát hiện bởi thời gian chạy và các trang / điều khiển được tự động biên dịch lại.

Việc quản lý thời gian chạy quản lý các hội đồng mã hóa sẽ ít làm việc hơn đối với bạn, vì bạn không cần phải lo lắng về việc cung cấp các trang / điều khiển tên duy nhất hoặc sắp xếp chúng thành các không gian tên khác nhau.

Tôi không nói rằng việc triển khai các tệp mã luôn là một ý tưởng tốt (đặc biệt không phải trong trường hợp các tệp mã được chia sẻ), nhưng các tệp mã chỉ nên chứa mã thực hiện các tác vụ cụ thể của UI, trình xử lý sự kiện nối dây, v.v. xếp lớp sao cho mã quan trọng luôn kết thúc trong thư mục Bin. Nếu đó là trường hợp thì việc triển khai các tệp codebehind không nên được coi là có hại.

Một hạn chế khác của Ứng dụng web là bạn chỉ có thể sử dụng ngôn ngữ của dự án. Trong trang web, bạn có thể có một số trang bằng C #, một số bằng VB, v.v. Không cần hỗ trợ Visual Studio đặc biệt. Đó là vẻ đẹp của khả năng mở rộng của nhà cung cấp xây dựng.

Ngoài ra, trong Ứng dụng web, bạn không nhận được lỗi phát hiện trong các trang / điều khiển vì trình biên dịch chỉ biên dịch các lớp mã của bạn chứ không phải mã đánh dấu (trong MVC bạn có thể sửa lỗi này bằng tùy chọn MvcBuildViews), được biên dịch khi chạy.

Visual Studio

Bởi vì Ứng dụng web là dự án Visual Studio, bạn nhận được một số tính năng không khả dụng trong Trang web. Chẳng hạn, bạn có thể sử dụng các sự kiện xây dựng để thực hiện nhiều tác vụ khác nhau, ví dụ như thu nhỏ và / hoặc kết hợp các tệp Javascript.

Một tính năng hay khác được giới thiệu trong Visual Studio 2010 là chuyển đổi Web.config .Điều này cũng không có sẵn trong các trang web. Bây giờ hoạt động với các trang web trong VS 2013.

Xây dựng một ứng dụng web nhanh hơn xây dựng một trang web, đặc biệt cho các trang web lớn. Điều này chủ yếu là do Ứng dụng web không biên dịch mã đánh dấu. Trong MVC nếu bạn đặt MvcBuildViews thành true thì nó sẽ biên dịch mã đánh dấu và bạn nhận được lỗi phát hiện, điều này rất hữu ích. Mặt trái là mỗi khi bạn xây dựng giải pháp, nó sẽ xây dựng trang hoàn chỉnh, có thể chậm và không hiệu quả, đặc biệt nếu bạn không chỉnh sửa trang. Tôi thấy mình bật và tắt MvcBuildViews (yêu cầu hủy tải dự án). Mặt khác, với các Trang web, bạn có thể chọn nếu bạn muốn xây dựng trang web như một phần của giải pháp hay không. Nếu bạn chọn không, thì việc xây dựng giải pháp rất nhanh và bạn luôn có thể nhấp vào nút Trang web và chọn Xây dựng, nếu bạn đã thực hiện thay đổi.

Trong dự án Ứng dụng web MVC, bạn có các lệnh và hộp thoại bổ sung cho các tác vụ phổ biến, như 'Thêm chế độ xem', 'Chuyển đến chế độ xem', 'Thêm bộ điều khiển', v.v. Những thứ này không có sẵn trong Trang web MVC.

Nếu bạn sử dụng IIS Express làm máy chủ phát triển, trong Trang web, bạn có thể thêm các thư mục ảo. Tùy chọn này không có sẵn trong Ứng dụng web.

Khôi phục gói NuGet không hoạt động trên các trang web, bạn phải cài đặt thủ công các gói được liệt kê trên gói.configGói Khôi phục hiện hoạt động với các Trang web bắt đầu NuGet 2.7


43
Bởi vì các lập trình viên viết ứng dụng, ứng dụng sau đó được xây dựng. Nhóm thử nghiệm kiểm tra ứng dụng trên hệ thống kiểm tra. Sau đó khách hàng cài đặt các ứng dụng. RẤT nghĩ rằng bạn muốn là bất cứ ai thực hiện thay đổi trực tiếp!
Ian Ringrose

12
Đối với tôi có sự lựa chọn là tốt nhất, trên các trang web, bạn luôn có thể kế thừa từ một lớp cơ sở được biên dịch sẵn nếu bạn muốn. Có nhiều ngôn ngữ / khung (ví dụ PHP) nơi mọi người đã quen với ý tưởng triển khai mã nguồn. Điều đó không có nghĩa là những ứng dụng không 'nghiêm trọng'.
Max Toro

6
"Trên thực tế, bạn không quản lý các DLL đó, [...] bạn thậm chí không cần phải biết chúng tồn tại. Không phải là vấn đề." - Cho đến khi khung bị nhầm lẫn, không dọn sạch các phiên bản cũ một cách chính xác và bắt đầu ném các ngoại lệ biên dịch với các tên xung đột trên tất cả các trang web ... Bạn có thể thêm phát hiện lỗi đánh dấu thông qua việc sử dụng dự án WebDeployment. Tôi cũng không chắc về điểm cuối cùng của bạn "với các trang web bạn có thể sử dụng IIS làm máy chủ", bạn cũng có thể làm điều này với Ứng dụng web - và tôi có các dự án như thế này trong đó dự án là một phần của ứng dụng web lớn hơn.
Zhaph - Ben Duguid

3
Triển khai một trang web không phải lúc nào cũng phải đến một máy chủ trực tiếp. Lặp đi lặp lại phát triển, trong một thế giới hoàn hảo, phải được thử nghiệm trên một tấm gương của môi trường sống. Với Ứng dụng web không có khả năng thực hiện thay đổi mã nhanh chóng cho một trang web đang chạy trên máy chủ IIS phát triển (nghĩa là không chạy bằng thể hiện VS cục bộ), việc kiểm tra các giải pháp nhỏ nhanh chóng là một nỗi đau lớn. Điều này xảy ra mọi lúc trong các hệ thống mà bạn không thể sao chép các điều kiện tương tự trên máy cục bộ của mình.
NikoRoberts

4
"Đây có thể là một nỗi đau thực sự trong quá trình phát triển, vì bạn phải tiếp tục xây dựng lại để xem các thay đổi" ... hãy nhớ rằng nó sẽ phải là một dự án MASSIVE hoặc một máy tính THỰC SỰ để nó trở thành một nỗi đau phải làm xây dựng lại những ngày này.
Darren

75

Trang web = sử dụng khi trang web được tạo bởi các nhà thiết kế đồ họa và các lập trình viên chỉ chỉnh sửa một hoặc hai trang

Ứng dụng web = sử dụng khi ứng dụng được tạo bởi các lập trình viên và các nhà thiết kế đồ họa chỉ chỉnh sửa một hoặc hai trang / hình ảnh.

Các trang web có thể được sử dụng để sử dụng bất kỳ công cụ HTML nào mà không cần phải có nhà phát triển, vì các tệp dự án không cần phải cập nhật, v.v. Các ứng dụng web là tốt nhất khi nhóm chủ yếu sử dụng studio của nhà phát triển và có nội dung mã cao.

(Một số lỗi mã hóa được tìm thấy trong Ứng dụng web tại thời gian biên dịch không tìm thấy trong Trang web cho đến thời gian chạy.)

Cảnh báo: Tôi đã viết câu trả lời này từ nhiều năm trước và không sử dụng Asp.net kể từ đó. Tôi hy vọng mọi thứ đã chuyển sang.


40

Trừ khi bạn có nhu cầu cụ thể cho một dự án được biên dịch động, không sử dụng dự án trang web .

Tại sao? Bởi vì dự án trang web sẽ đẩy bạn lên tường khi cố gắng thay đổi hoặc hiểu dự án của bạn. Các tính năng tìm kiếm gõ tĩnh (ví dụ: tìm tập quán, tái cấu trúc) trong Visual Studio sẽ mất tất cả cho bất kỳ dự án có kích thước hợp lý nào. Để biết thêm thông tin, hãy xem câu hỏi về Stack Overflow Slow chậm Tìm tất cả các tài liệu tham khảo trong Visual Studio .

Tôi thực sự không thể thấy lý do tại sao họ bỏ các ứng dụng web trong Visual Studio 2005 cho loại dự án trang web carbuncle gây đau đớn, mất vệ sinh, năng suất.


30

Có một bài viết trong MSDN mô tả sự khác biệt:

So sánh các dự án trang web và các dự án ứng dụng web

BTW: có một số câu hỏi tương tự về chủ đề đó, ví dụ:


Tôi đoán câu trả lời về việc tôi nên sử dụng codefile hay codebehind trong phần đánh dấu đã biến mất với câu trả lời đã bị xóa bởi SO ...
tiếng Pháp

Vì vậy, đối với những người thắc mắc: ứng dụng web = giải pháp có cấu trúc tốt = codebehind trong markup VS website = bó tệp = codefile trong markup
tiếng Pháp

22

Điều này nghe có vẻ hơi rõ ràng, nhưng tôi nghĩ đó là một điều bị hiểu lầm bởi vì Visual Studio 2005 chỉ được phát hành cùng với trang web ban đầu. Nếu dự án của bạn liên quan đến một trang web khá hạn chế và không có nhiều sự tách biệt hợp lý hoặc vật lý, thì trang web đó vẫn ổn. Tuy nhiên, nếu nó thực sự là một ứng dụng web với các mô-đun khác nhau, nơi nhiều người dùng thêm và cập nhật dữ liệu, bạn nên sử dụng ứng dụng web tốt hơn.

Điểm chuyên nghiệp lớn nhất của mô hình trang web là mọi thứ trong app_codephần này đều được biên dịch động. Bạn có thể thực hiện cập nhật tệp C # mà không cần triển khai lại đầy đủ. Tuy nhiên điều này đến ở một sự hy sinh lớn. Rất nhiều điều xảy ra dưới vỏ bọc rất khó kiểm soát. Không gian tên khó kiểm soát và việc sử dụng DLL cụ thể đi ra ngoài cửa sổ theo mặc định cho mọi thứ bên dưới app_codevì mọi thứ được biên dịch động.

Mô hình ứng dụng web không có trình biên dịch động, nhưng bạn có quyền kiểm soát những điều mà tôi đã đề cập.

Nếu bạn đang thực hiện phát triển n-tier, tôi khuyên bạn nên mô hình ứng dụng web. Nếu bạn đang làm một trang web hạn chế hoặc triển khai nhanh và bẩn, mô hình trang web có thể có lợi thế.

Phân tích chi tiết hơn có thể được tìm thấy trong:


3
> Điểm chuyên nghiệp lớn nhất của mô hình trang web là mọi thứ trong phần app_code đều được biên dịch động. Điều này cũng có một nhược điểm lớn. Trang web của tôi được lưu trữ với webhost4life có giá rẻ nhưng giàu tính năng. Nhược điểm là họ tái chế quy trình công nhân rất thường xuyên (15 phút?), Điều đó có nghĩa là người dùng tiếp theo có trang đầu tiên rất chậm khi ứng dụng được biên dịch lại.
Rob Nicholson

19

Từ cuốn sách luyện thi nhịp độ MCTS 70-515 cuốn sách:

Với ứng dụng web (dự án),

  1. Bạn có thể tạo một ứng dụng MVC.
  2. Visual Studio lưu trữ danh sách các tệp trong tệp dự án (.csproj hoặc .vbproj), thay vì dựa vào cấu trúc thư mục.
  3. Bạn không thể trộn Visual Basic và C #.
  4. Bạn không thể chỉnh sửa mã mà không dừng phiên gỡ lỗi.
  5. Bạn có thể thiết lập sự phụ thuộc giữa nhiều dự án web.
  6. Bạn phải biên dịch ứng dụng trước khi triển khai, điều này ngăn bạn kiểm tra một trang nếu một trang khác sẽ không biên dịch.
  7. Bạn không phải lưu trữ mã nguồn trên máy chủ.
  8. Bạn có thể kiểm soát tên và phiên bản lắp ráp.
  9. Bạn không thể chỉnh sửa các tệp riêng lẻ sau khi triển khai mà không biên dịch lại.

# 4 là sai. "Chỉnh sửa và tiếp tục" có thể được bật, với một số hạn chế. Có lẽ điều này đúng trong năm 2011. # 9 sẽ nói "bạn không thể chỉnh sửa các tệp mã nguồn riêng lẻ mà không biên dịch lại". Bạn có thể chỉnh sửa .aspx, .js, .css, v.v. mà không cần biên dịch lại.
John Saunders

# 4 có một góc độ khác. Nếu bạn mở một trang web bằng cách sử dụng Tệp> Mở> Trang web và điều hướng đến thư mục hệ thống tệp cho trang web, thay vì mở trang web thông qua việc chọn giải pháp từ cửa sổ bắt đầu, bạn có thể chỉnh sửa mô-đun lớp và mã hóa (ít nhất là trong vb.net ) mà không dừng gỡ lỗi. Bạn sẽ không thấy các thay đổi cho đến khi bạn xây dựng lại, tuy nhiên, thường rất hữu ích khi có thể xem hành vi của trang trong khi bạn đang sửa đổi mã. Nhược điểm là bạn mất tất cả mọi thứ đi vào giải pháp: điểm dừng, tệp mở, dấu trang, v.v ... Và đôi khi bạn phải xóa các tệp sln / sou.
wayfarer

16

Nó phụ thuộc vào những gì bạn đang phát triển.

Một trang web hướng nội dung sẽ có nội dung thay đổi thường xuyên và một trang web tốt hơn cho điều đó.

Một ứng dụng có xu hướng lưu trữ dữ liệu của nó trong cơ sở dữ liệu và các trang và mã của nó hiếm khi thay đổi. Trong trường hợp này, tốt hơn là có một ứng dụng Web trong đó việc triển khai các cụm được kiểm soát nhiều hơn và hỗ trợ tốt hơn cho thử nghiệm đơn vị.


16

Compilation Đầu tiên là có một sự khác biệt trong việc biên soạn. Trang web không được biên dịch trước trên máy chủ, nó được biên dịch trên tập tin. Nó có thể là một lợi thế bởi vì khi bạn muốn thay đổi một cái gì đó trong Trang web của mình, bạn chỉ cần tải xuống một tệp cụ thể từ máy chủ, thay đổi nó và tải tệp này trở lại máy chủ và mọi thứ sẽ hoạt động tốt. Trong Ứng dụng web, bạn không thể thực hiện việc này vì mọi thứ đều được biên dịch sẵn và bạn kết thúc chỉ với một dll. Khi bạn thay đổi một cái gì đó trong một tệp của dự án của bạn, bạn phải biên dịch lại mọi thứ một lần nữa. Vì vậy, nếu bạn muốn có khả năng thay đổi một số tệp trên Trang web của máy chủ thì giải pháp tốt hơn cho bạn. Nó cũng cho phép nhiều nhà phát triển làm việc trên một trang web. Mặt khác, nếu bạn không muốn mã của mình có sẵn trên máy chủ, bạn nên chọn Ứng dụng web.

Project structure Cũng có một sự khác biệt trong cấu trúc của dự án. Trong Ứng dụng web, bạn có một tệp dự án giống như bạn đã có nó trong ứng dụng thông thường. Trong trang web không có tệp dự án truyền thống, tất cả những gì bạn có là tệp giải pháp. Tất cả các tham chiếu và cài đặt được lưu trữ trong tệp web.config. @Page directive Có một thuộc tính khác trong chỉ thị @Page cho tệp chứa lớp được liên kết với trang này. Trong Ứng dụng Web, nó là "CodeBehind" tiêu chuẩn, trong Trang web bạn sử dụng "CodeFile". Bạn có thể thấy điều này trong các ví dụ dưới đây:

Ứng dụng web:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs"  
Inherits="WebApplication._Default" %>  

Trang mạng:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> 

Không gian tên - Trong ví dụ trên, bạn cũng có thể thấy một sự khác biệt khác - cách tạo không gian tên. Trong không gian tên Ứng dụng Web chỉ đơn giản là một tên của dự án. Trong trang web có không gian tên mặc định ASP cho các trang được biên dịch động.

Chỉnh sửa và tiếp tục- Trong ứng dụng Web Tùy chọn chỉnh sửa và tiếp tục khả dụng (để bật nó, bạn phải vào Menu công cụ, nhấp vào Tùy chọn sau đó tìm Chỉnh sửa và tiếp tục trong gỡ lỗi). Tính năng này không hoạt động trong Trang web.ASP.NET MVC Nếu bạn muốn phát triển các ứng dụng web bằng cách sử dụng

ASP.NET MVC (Model View Controller) tùy chọn tốt nhất và mặc định là Ứng dụng web. Mặc dù có thể sử dụng MVC trong trang web nhưng không nên.

Tóm tắt - Sự khác biệt quan trọng nhất giữa Ứng dụng web ASP.NET và Trang web là biên dịch. Vì vậy, nếu bạn làm việc trong một dự án lớn hơn, nơi một vài người có thể sửa đổi thì tốt hơn là sử dụng Trang web. Nhưng nếu bạn đang thực hiện một dự án nhỏ hơn, bạn cũng có thể sử dụng Ứng dụng web.


Trong một dự án lớn có nhiều người thay đổi nó, bạn sử dụng kiểm soát nguồn, vì vậy đây không phải là lý do để sử dụng "dự án" trang web.
John Saunders

+1 để phân biệt trong codebehind (webapp) so với codefile (website) trong chỉ thị trang. Đây là một độ chính xác mà thiếu trong câu trả lời được chọn.
Pháp

11

Có ứng dụng web tốt hơn nhiều so với các trang web, vì các ứng dụng Web cho chúng ta sự tự do:

  1. Để có nhiều dự án dưới một chiếc ô và thiết lập các phụ thuộc dự án giữa. Ví dụ: đối với PCS chúng ta có thể theo dõi trong ứng dụng web-

    • Cổng thông tin web
    • Bộ điều khiển thông báo (để gửi Email)
    • Lớp kinh doanh
    • Lớp truy cập dữ liệu
    • Quản lý ngoại lệ
    • Tiện ích máy chủ
    • Dịch vụ WCF (Chung cho tất cả các nền tảng)
    • Danh sách mục
  2. Để chạy thử nghiệm đơn vị trên mã trong các tệp lớp được liên kết với các trang ASP.NET

  3. Để tham khảo các lớp được liên kết với các trang và điều khiển người dùng từ các lớp độc lập
  4. Để tạo một hội đồng duy nhất cho toàn bộ trang web
  5. Kiểm soát tên lắp ráp và số phiên bản được tạo cho trang web
  6. Để tránh đặt mã nguồn trên một máy chủ sản xuất. (Bạn có thể tránh triển khai mã nguồn lên máy chủ IIS. Trong một số trường hợp, chẳng hạn như môi trường lưu trữ được chia sẻ, bạn có thể lo ngại về việc truy cập trái phép mã nguồn trên máy chủ IIS. (Đối với dự án trang web, bạn có thể tránh rủi ro này bằng cách biên dịch trước trên một máy tính phát triển và triển khai các tập hợp được tạo thay vì mã nguồn. Tuy nhiên, trong trường hợp đó, bạn mất một số lợi ích của việc cập nhật trang web dễ dàng.)
  7. Sự cố về hiệu suất với trang web (Yêu cầu đầu tiên đối với trang web có thể yêu cầu trang web được biên dịch, điều này có thể dẫn đến sự chậm trễ. Và nếu trang web đang chạy trên máy chủ IIS bị thiếu bộ nhớ, bao gồm toàn bộ trang web trong một lắp ráp đơn có thể sử dụng nhiều bộ nhớ hơn mức cần thiết cho nhiều cụm.)

11

Một trong những khác biệt chính là các trang web biên dịch linh hoạt và tạo ra các hội đồng nhanh chóng. Web applicaitons biên dịch thành một hội đồng lớn.

Sự khác biệt giữa hai người đã được thực hiện trong Visual Studio 2008.


4
"Sự khác biệt giữa 2 đã được loại bỏ trong vs2008" - không chắc ý của bạn là gì - chúng vẫn là các loại dự án riêng biệt trong VS2008, hoạt động khác nhau và được tạo thông qua các tùy chọn menu khác nhau - tuy nhiên ít nhất cả hai đều có sẵn theo mặc định trong VS2008.
Zhaph - Ben Duguid

9

Các ứng dụng thường được biên dịch trước khi triển khai khi trang web sử dụng thư mục app_code. Khi có bất cứ điều gì thay đổi trong thư mục mã ứng dụng, máy chủ sẽ biên dịch lại mã. Điều này có nghĩa là bạn có thể thêm / thay đổi mã với một trang web đang hoạt động.

Ưu điểm của một ứng dụng là không có biên dịch lại và do đó thời gian khởi động ban đầu sẽ nhanh hơn.


Điều đó đúng một phần, bạn có thể biên dịch trước các trang trong trang web nếu bạn muốn
Amr H. Abd Elmajeed

8

Tôi khuyên bạn nên xem video Dự án ứng dụng web & Dự án triển khai web trên trang web ASP.NET giải thích sự khác biệt rất chi tiết, nó khá hữu ích với tôi.

Nhân tiện, đừng nhầm lẫn với tiêu đề, một phần tuyệt vời của video giải thích sự khác biệt giữa các dự án trang web và dự án ứng dụng web và lý do Microsoft giới thiệu lại các dự án ứng dụng Web trong Visual studio 2005 (như bạn có thể đã biết, nó ban đầu chỉ xuất xưởng với các dự án trang web sau đó các dự án ứng dụng web đã được thêm vào SP1). Một video tuyệt vời tôi rất khuyến khích cho bất cứ ai muốn biết sự khác biệt.



7

Một "trang web" có mã của nó trong một thư mục App_Code đặc biệt và nó được biên dịch thành một số DLL (tập hợp) khi chạy. Một "ứng dụng web" được biên dịch thành một DLL duy nhất.


5

Website và Project >> website là hai phương pháp khác nhau để tạo ứng dụng ASP.NET bằng visual studio. Một là không có dự án và một là môi trường dự án. Sự khác biệt là

  1. Tệp giải pháp được lưu trữ trong cùng thư mục với thư mục gốc trong môi trường dự án.
  2. Cần loại bỏ các tập tin giải pháp và dự án trước khi triển khai trong môi trường dự án.
  3. Toàn bộ thư mục gốc được triển khai trong môi trường không có dự án.

không có nhiều khác biệt cơ bản trong việc sử dụng một trong hai cách tiếp cận. Nhưng nếu bạn đang tạo trang web sẽ mất nhiều thời gian hơn, hãy chọn môi trường dự án.


1
Các tập tin giải pháp không cần phải trong cùng một thư mục. Ngoài ra, cơ chế xuất bản tiêu chuẩn sẽ loại bỏ bất kỳ tạo phẩm nào không có trong trang đích, ví dụ, các tệp mã cơ sở không được triển khai.
John Saunders

5

Mô hình dự án ứng dụng web

  • Cung cấp ngữ nghĩa dự án Web giống như các dự án Visual Studio .NET Web. Có tệp dự án (cấu trúc dựa trên tệp dự án). Xây dựng mô hình - tất cả các mã trong dự án được biên dịch thành một cụm duy nhất. Hỗ trợ cả IIS và Máy chủ phát triển ASP.NET tích hợp. Hỗ trợ tất cả các tính năng của Visual Studio 2005 (tái cấu trúc, tổng quát, v.v.) và của ASP.NET (trang chính, thành viên và đăng nhập, điều hướng trang web, chủ đề, v.v.). Sử dụng FrontPage Server Extension (FPSE) không còn là một yêu cầu.

Mô hình dự án trang web

  • Không có tệp dự án (Dựa trên hệ thống tệp).
  • Mô hình biên dịch mới.
  • Biên dịch động và làm việc trên các trang mà không xây dựng toàn bộ trang web trên mỗi lượt xem trang.
  • Hỗ trợ cả IIS và Máy chủ phát triển ASP.NET tích hợp.
  • Mỗi trang có lắp ráp riêng.
  • Mô hình mã không hiệu quả.

5

Nó luôn luôn phụ thuộc vào yêu cầu của khách hàng của bạn. ASP.NET chỉ bao gồm các tính năng linh hoạt mà người dùng cần để bảo mật và dễ dàng bảo trì ứng dụng của bạn.

Bạn có thể nghĩ về một ứng dụng Web như một tệp nhị phân chạy bên trong khung ASP.NET. Và các trang web như một trang web tĩnh mà bạn có thể xem xét và dễ dàng triển khai mã nguồn.

Nhưng ưu điểm và nhược điểm của hai công nghệ ASP.NET này là những gì tốt.


4

Trang web - Không có tệp giải pháp sẽ được tạo. Nếu chúng tôi muốn tạo các trang web không cần studio hình ảnh.

Ứng dụng web - Một tệp giải pháp sẽ được tạo. Nếu chúng ta muốn tạo ứng dụng web thì cần có studio hình ảnh. Nó sẽ tạo một .dlltập tin duy nhất trong thư mục bin.


2
-1 Bạn thực sự có một tệp giải pháp nếu bạn tạo một dự án trang web thông qua phòng thu trực quan. Bạn không có một tập tin dự án.
Darren

Chắc chắn +1, bạn có thể tạo tệp giải pháp nhưng tệp này hầu như trống nên nó chỉ gây phiền toái (VS hỏi nơi lưu tệp khi thoát) và không phải là thứ gì đó hữu ích
tiếng Pháp

3

Trong các dự án ứng dụng web, Visual Studio cần các tệp .designer bổ sung cho các trang và điều khiển người dùng. Dự án trang web không yêu cầu chi phí này. Đánh dấu chính nó được hiểu là thiết kế.


3

WebSite: Nó tự động tạo thư mục app_code và nếu bạn xuất bản nó trên máy chủ và sau đó nếu bạn thực hiện một số thay đổi trong bất kỳ tệp hoặc trang cụ thể nào thì bạn không phải biên dịch tất cả các tệp.

Ứng dụng web Nó tự động tạo tệp giải pháp mà trang web không tạo ra và nếu bạn thay đổi trong một tệp hơn bạn phải biên dịch dự án đầy đủ để phản ánh các thay đổi của nó.


"Biên dịch toàn bộ dự án" không có nghĩa là biên dịch mọi tệp trong dự án. Các tệp mã nguồn không thay đổi sẽ không được biên dịch lại.
John Saunders

3

Trong một ứng dụng web, bạn có thể tạo các lớp chức năng của dự án và có thể tạo ra sự phụ thuộc lẫn nhau giữa chúng bằng cách chia nó thành nhiều dự án, nhưng bạn không bao giờ có thể làm điều này trên trang web.


3

Ứng dụng web chắc chắn, tập tin DLL duy nhất và dễ bảo trì. Nhưng một trang web linh hoạt hơn; bạn có thể chỉnh sửa tập tin aspx khi đang di chuyển.


Bạn cũng có thể chỉnh sửa tệp aspx trong dự án ứng dụng web.
John Saunders

3

Các ứng dụng web đòi hỏi nhiều bộ nhớ hơn, có lẽ vì bạn không có lựa chọn nào khác ngoài việc biên dịch thành một cụm duy nhất. Tôi vừa chuyển đổi một trang web lớn sang ứng dụng web và gặp vấn đề với việc hết bộ nhớ, cả lúc biên dịch với thông báo lỗi như dưới đây:

Unexpected error writing metadata to file '' -- 
Not enough storage is available to complete this operation. 

lỗi và tại thời gian chạy với thông báo lỗi này như dưới đây:

Exception information: 
    Exception type: HttpException 
    Exception message: Exception of type 'System.OutOfMemoryException' was thrown.
   at System.Web.Compilation.BuildManager.ReportTopLevelCompilationException()

Đề nghị của tôi để chuyển đổi các trang web lớn hơn trên phần cứng kế thừa bị hạn chế bộ nhớ là, để chọn tùy chọn hoàn nguyên về mô hình trang web. Ngay cả sau khi một vấn đề thành công ban đầu có thể leo lên sau đó.


Điều đó dường như không phải là một ngoại lệ thời gian biên dịch.
John Saunders

1

Ở đây Ứng dụng Hỗ trợ Web là một ví dụ về trang web.

Ở đây Ứng dụng Hỗ trợ Web là một ví dụ về trang web. Cả trang web và ứng dụng web đều có thể động / tĩnh tùy thuộc vào yêu cầu, đây là một ví dụ để hiểu hoạt động của ứng dụng web và ứng dụng web.


Điều này không áp dụng trong asp.net. Phân biệt ứng dụng trang web / web (theo thuật ngữ asp.net) là về cách tổ chức các tệp (như một giải pháp được tổ chức tốt hoặc như một bó các tệp) và được biên dịch ("JIT" so với tĩnh). Trong cả hai trường hợp, "chương trình" chủ yếu là phía máy chủ.
Pháp

0

Để tóm tắt một số câu trả lời ở trên:

Tính linh hoạt , bạn có thể thay đổi trực tiếp một trang web không?

Trang web : Có thể. Pro: lợi ích ngắn hạn. Con: rủi ro dài hạn của sự hỗn loạn dự án.

Ứng dụng web : Con: không thể. Chỉnh sửa một trang, lưu trữ các thay đổi để kiểm soát nguồn, sau đó xây dựng và triển khai toàn bộ trang. Pro: duy trì một dự án chất lượng.

Vấn đề phát triển

Trang web : Cấu trúc dự án đơn giản không có tệp .csproj. Các trang .aspx có thể có cùng tên lớp mà không có xung đột. Tên thư mục dự án ngẫu nhiên dẫn đến xây dựng các lỗi như tại sao khung .net xung đột với tệp được tạo riêng của nótại sao khung .net xung đột với tệp được tạo của chính nó . Pro: Đơn giản (đơn giản). Con: thất thường.

Ứng dụng web : Cấu trúc dự án tương tự như dự án WebForms, với tệp .csproj. Tên lớp của trang asp phải là duy nhất. Pro: Đơn giản (thông minh). Con: không, vì một ứng dụng web vẫn đơn giản.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.