2009-02-01 30 views
13

Làm thế nào để App_Code không phải là lựa chọn trong menu phụ Add ​​ASP.NET Folder trong trình khám phá giải pháp VS? Tôi nhận ra rằng bạn có thể tự mình tạo một cách thủ công bằng cách đổi tên một Thư Mục Mới, nhưng điều gì là hợp lý ở đây? Đây không phải là nơi bạn có nghĩa vụ phải đặt lớp "tiện ích" hoặc "lớp dịch vụ" loại?Dự án ASP.NET MVC và thư mục App_Code

Trên ghi chú của dự án MVC. Tôi thích thực tế là có một tham chiếu đến System.Configuration out-of-the-box không giống như các dự án mẫu ASP.NET Web mặc định.

Trả lời

10

Câu trả lời thực sự là bởi vì Microsoft muốn bạn mua trong đó bạn cần VS để làm MVC. Tuy nhiên, để chuyển đổi dự án thành JIT thuần túy, đó là cách dễ dàng hơn để làm việc với ...

Bạn có thể làm điều đó khá thẳng về phía trước.

(1) Di chuyển tất cả các thư mục chứa các file class để App_Code (để xem thư mục mà nó là)
(2) Thực hiện Global.asax không cần mã đằng sau hoặc tham chiếu kế thừa bằng cách loại bỏ những thuộc tính sau đó đặt

[script runat="server"] 
... place contents of code behind's class inner code 
[/script] 

và xóa các mã sau cho tốt

(3) trong Bin Tháo tham khảo DLL dự án làm cho chắc chắn để giữ các file DLL cần thiết khác về chạy MVC
(4) Re di chuyển các tệp giải pháp và thư mục thuộc tính và thư mục obj

Tôi làm điều này thường xuyên cho nop MVC vì nó đơn giản hơn nhiều khi làm việc với tầng web trên JIT. Các nhà phát triển không hiểu điều này không hoạt động trong các chiến hào mỗi ngày trên nhiều trang web với nhiều bản sửa lỗi nhanh tùy chỉnh cần thiết. Các trang web chúng tôi làm việc để có được hàng trăm nghìn lượt truy cập mỗi ngày để sử dụng JIT không có hình phạt hiệu suất sau lần gặp đầu tiên.
Dường như ít hơn khi phát triển trang web nhỏ hơn.

+1

tuyệt vời "làm việc xung quanh". – BuddyJoe

+1

Tôi đã ngừng làm việc với MVC bằng cách này. Tôi chỉ sử dụng kiểu Matrix thuần túy với URL Rewrite. Có một mã tấn ít hơn. Vâng, tôi bắt đầu đi tất cả Linux ngay bây giờ anyway trong khi chúng tôi đang ở đó. Node.js thực sự đang giết nó. –

+0

Cũng giúp bạn có thể kiểm tra [RequireHttps] và để lại một mình mà không có một loạt các câu lệnh rác trong mã. –

10

Nói chung, tôi đặt các lớp "lớp dịch vụ" và "tiện ích" trong một dự án riêng biệt và thêm nó làm tham chiếu đến ứng dụng web của tôi. Với khung công tác MVC, tôi không thực sự thấy cần phải biên dịch các lớp khi chạy.

+0

Còn tốc độ phát triển thì sao? Thay đổi mã/lưu/làm mới trình duyệt so với Thay đổi mã/lưu/xây dựng .../làm mới trình duyệt. –

+0

David, Bạn có đặt các dự án của mình vào cùng một Solution và đặt tham chiếu hoặc các Project hoàn toàn khác và lấy tham chiếu không? – johnny

+1

@johnny Trong cùng một giải pháp, trừ khi đó là thư viện đa năng mà tôi sử dụng lại ở nơi khác. –

21

Điều này có thể do dự án ASP.NET MVC là một ứng dụng web chứ không phải là một trang web. Trong một trang web, các tệp lớp được biên dịch động tại thời gian chạy và phải nằm trong thư mục App_Code. Trong một ứng dụng web, mọi thứ được biên dịch tĩnh và các tệp lớp có thể sống ở bất kỳ đâu trong ứng dụng web của bạn.

Như David Brown đã chỉ ra, thường được đề nghị đặt định nghĩa lớp bổ sung trong một thư viện lớp riêng biệt và sau đó tham khảo từ ứng dụng web của bạn. Nếu bạn viết đơn vị kiểm tra hoặc tham khảo các lớp học của bạn từ các tập tin cấu hình, nó có thể được thử thách hoặc không thể truy cập các lớp này nếu chúng được xác định chỉ trong ứng dụng web của bạn.

+0

+1. Tôi cũng nhận thấy đó là một "Chuyển đổi sang ứng dụng web" đó là gì? tại sao nó là một lựa chọn trong MVC? – BuddyJoe

+0

+1 để giải thích nó tốt hơn tôi đã làm. ;) –

+0

Trớ trêu thay, "Chuyển đổi sang ứng dụng web" chỉ khả dụng cho các ứng dụng web! Tùy chọn này thực sự dành cho các ứng dụng web đã được chuyển đổi từ các trang web. Điều này đi qua tất cả các tập tin aspx và ascx của bạn và chuyển đổi chúng sang định dạng ứng dụng web. – davogones

0

Đối với những người không muốn thư viện dự án/lớp học thứ hai và chỉ muốn một thư mục đơn giản cho một vài lớp C#, tôi đề xuất “App_Classes”.

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