CodeFile vs CodeBehind


138

Sự khác biệt giữa CodeFile = "file.ascx.cs" và CodeBehind = "file.ascx.cs" trong khai báo điều khiển người dùng ASP.NET là gì?

Là một cái mới hơn hoặc được đề nghị? Hay họ có cách sử dụng cụ thể?

Câu trả lời:


163

CodeBehind : Cần được biên dịch (mô hình ASP.NET 1.1). Nhị phân biên dịch được đặt trong thư mục bin của trang web. Bạn cần phải biên dịch trong Visual Studio trước khi triển khai. Đó là một mô hình tốt khi bạn không muốn mã nguồn có thể xem được dưới dạng văn bản thuần túy. Ví dụ: khi giao hàng cho khách hàng mà bạn không có nghĩa vụ cung cấp mã.

CodeFile : Bạn cung cấp tệp nguồn với giải pháp để triển khai. Thời gian chạy ASP.NET 2.0 biên dịch mã khi cần. Các tệp được biên dịch có tại Microsoft.NET [Phiên bản .NET] \ Tệp ASP.NET tạm thời.


2
Vì vậy, điều này có nghĩa là nhà phát triển phải thay đổi thủ công thuộc tính của chỉ thị Trang hay có cách nào để tạo một dự án web chọn mã hóa hoặc mã hóa, theo mặc định, mỗi khi một trang web mới được thêm vào?
Matt W

38
Cách tôi thấy đó là CodeFile có nghĩa là được sử dụng cho "WebSite" và "Codebehind" có nghĩa là cho "Dự án ứng dụng web" vì nó cần được biên dịch. Vì vậy, trong khi chuyển đổi "Trang web" thành "Dự án ứng dụng web", chúng tôi có thể cần phải thay đổi thủ công tất cả các lần xuất hiện của CodeFile thành Codebehind!
bội ướcMind

2
CodeFiles rất hay trong quá trình phát triển vì bạn có thể kiểm tra các thay đổi sau khi chỉ cần lưu và làm mới một trang và không phải Xây dựng dự án của bạn. Bạn vẫn có thể tùy ý "Xuất bản" tệp mô hình biên dịch .Net 2+ CodeFile dưới dạng DLL nếu bạn không muốn đăng các tệp .cs và .vb lên máy chủ sản xuất. Khi bạn Xuất bản dự án của mình, bạn có thể tùy chọn chọn các tùy chọn "Tiền biên dịch" để biến một hoặc cả hai tệp .aspx và tệp .cs / .vb của mình thành DLL, như CodeBehind.
scradam

1
Như renegadeMind đã chỉ ra (và từ các upvote mà nó nhận được), tôi nghĩ rằng phản hồi nên được chỉnh sửa để nhấn mạnh thực tế rằng CodeFile được liên kết sâu với giải pháp loại "trang web" trong khi CodeBehind được liên kết với "dự án ứng dụng web" . Thật không may, chỉnh sửa của tôi đã bị từ chối.
Pháp

3
thực tế là codebehind được liên kết với asp 1.1 trong khi codefile được liên kết với asp.net 2.0 có thể liên kết để nghĩ rằng codefile "vượt trội" so với codebehind khi chúng không (và IMHO điều này hoàn toàn ngược lại: các ứng dụng web tốt hơn các trang web)
tiếng Pháp

5

Tệp Codebehind cần biên dịch trước khi chạy nhưng trong src chúng ta không cần biên dịch rồi chạy .. chỉ cần lưu tệp.


1
but in src- ý bạn là but in the CodeFilegì?
Don Cheadle

5

Tôi đang làm việc với Dự án ứng dụng trong Visual Studio Express 2012 cho Web và sử dụng .NET 4.0. Trong mã đằng sau các tệp để đăng nhập và thay đổi trang mật khẩu, tôi đã tìm thấy một tình huống mà tôi cần cả CodeBehind và CodeFile trong khai báo.

Nếu tôi không thêm một tham chiếu tệp mã như

CodeFile=login.aspx.cs

Trang web không phân tích cú pháp và trình duyệt hiển thị lỗi trình phân tích cú pháp. Không quan trọng tôi có biên dịch dự án hay không.

Nếu tôi không thêm mã phía sau tham chiếu như

CodeBehind=login.aspx.cs

Các tham chiếu đến các lớp Bảo mật như MemberhipUser không thành công cả về thời gian biên dịch và khi cố gắng sử dụng intellisense với một lỗi như "Không thể tìm thấy Kiểu hoặc không gian tên MemberhipUser". Tôi đã thêm một tham chiếu đến System.Web.ApplicationService theo yêu cầu của khung .Net 4.0.

Tôi nên thêm rằng các tệp rắc rối này đang chạy trong một ứng dụng trong trang web được tạo bằng công cụ Ứng dụng IIS. Khi tôi mở trang web từ Visual Studio, tôi không gặp khó khăn với lỗi trình phân tích cú pháp hoặc lỗi tham chiếu. Sự nhầm lẫn này chỉ xảy ra khi tôi mở ứng dụng như một dự án trong Visual Studio.


1
Tôi hiểu ý của bạn John. Và có lẽ nó xứng đáng với downvote, nhưng tôi thực sự đang vật lộn với vấn đề này vào lúc này. Có lẽ những khó khăn của tôi không đến từ sự khác biệt này mà từ một thứ khác. Tuy nhiên, mặc dù câu trả lời được chấp nhận trả lời câu hỏi, nó không giúp ích gì cho vấn đề thực tế mà tôi gặp phải. Có lẽ tôi nên mở một câu hỏi mới.
DavidHyogo
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.