2012-05-02 33 views
5

Vì vậy, tôi dường như có một số khó khăn khi đưa tham chiếu CodeFile của tôi vào CodeBehind. Trước khi bạn hỏi, tôi không có Visual Studio và tôi không có trên Windows. Mã đang được lưu trữ trên máy chủ IIS mà tôi có quyền truy cập.Chuyển đổi CodeFile thành CodeBehind

<% @Page Language="C#" Inherits="corn.cheese.pies.CasLogin" CodeFile="anon.cs" %> 

Mã này hoạt động hoàn hảo, tuy nhiên khi thay đổi nó để:

<% @Page Language="C#" Inherits="corn.cheese.pies.CasLogin" CodeBehind="anon.cs" %> 

Trang trả về một lỗi:

Parser Error Message: Could not load type 'corn.cheese.pies.CasLogin'. 
+2

Tôi tin rằng mã-đằng sau yêu cầu lớp điều khiển kế thừa có sẵn trong ứng dụng web DLL. Tại sao bạn cần/mong đợi để có thể làm điều này mà không có Visual Studio? – millimoose

+1

Không phải là câu trả lời, thực sự, nhưng: tại sao bạn lại đi từ CodeFile -> CodeBehind? Nói chung mọi người đi theo cách khác *, vì CodeFile là "mới hơn" (theo nghĩa tương đối "7 tuổi so với 9 tuổi"). –

Trả lời

14

Bạn có chắc bạn hiểu sự khác biệt giữa CodeFile và CodeBehind? Xem, ví dụ: CodeFile vs CodeBehind (bỏ qua câu trả lời chấp nhận, mặc dù cả hai liên kết đều là dea) hoặc this article về sự khác biệt.

Tóm lại:

Một tập tin CodeBehind được giả định là biên dịch vào một hội đồng được triển khai trong thư mục bin của trang web của bạn. Khi công cụ ASP.NET tải tệp aspx của bạn, nó sử dụng chỉ thị Inherits để cố gắng tìm lớp đó. Tệp CodeBehind chủ yếu được sử dụng để hỗ trợ biên dịch (và công cụ, ví dụ: "Xem nguồn") nhưng công việc được thực hiện tại thời gian biên dịch.

Một tệp CodeFile được đặt và biên dịch bởi ASP.NET khi chạy, theo yêu cầu. Bạn có thể "biên dịch trước" trang web của bạn để quay trở lại mô hình cũ hơn, điều này rất hữu ích nếu bạn không muốn triển khai mã nguồn của mình cho mọi trang web. Nhưng theo mặc định, tệp CodeFile của bạn là tệp .cs được triển khai cho trang web và lớp được tạo trong thư mục lưu trữ tạm thời ASP.NET. (Từ quan điểm kỹ thuật: CodeFile trang là partial class định nghĩa, chỉ với phần mã tùy chỉnh phía sau của lớp thực sự được triển khai trong tệp C#; đây là lý do tại sao CodeFile không tồn tại ban đầu, vì trình biên dịch C# ban đầu không thể thực hiện các lớp một phần .)

Bằng cách thay đổi từ CodeFile thành CodeBehind, bạn đang yêu cầu ASP.NET bỏ qua sự hiện diện của tệp C# và chỉ tìm kiếm trong phiên bản được biên dịch. ASP.NET là, lần lượt, nói với bạn rằng các biên dịch lắp ráp không thực sự chứa các lớp bạn nói với nó để tìm kiếm.