2011-01-07 5 views
131

Tôi đang cố gắng để có được một trang ASP.NET MVC 3 chạy trên IIS 6.0.ASP.NET: Phương thức này không thể được gọi trong giai đoạn khởi tạo trước khi bắt đầu của ứng dụng

Hiện nay khi tôi yêu cầu một trang từ máy chủ nó mang lại cho các lỗi sau:

Parser Error Message: This method cannot be called during the application's pre-start initialization stage.

trên dòng này:

<add name="MyMembershipProvider" type="NS.MyMembershipProvider" connectionStringName="MyDatabase" applicationName="/MySite"/> 

Tôi hoàn toàn bối rối và không có nhiều của một đầu mối về vòng đời ứng dụng ASP.NET, hãy để một mình sự khác biệt giữa 6.0 và 7.0. Đọc qua các trang MSDN trên nó dường như không giúp được gì nhiều.

Có ai có bất kỳ thông tin chi tiết hoặc liên kết tốt nào để điều tra không? :)

+1

Tôi có cùng sự cố với MVC 2 trên máy chủ web cục bộ VS (Cassini). –

+1

Vấn đề tương tự (và độ phân giải) dường như cũng được áp dụng cho MVC 3 trên IIS 7.0. – CrazyPyro

+2

Cũng có vấn đề này với MVC4 & IIS6, với một dự án mới. Cố định bằng cách loại bỏ webmatrix. *, Xem câu trả lời dưới đây. –

Trả lời

247

Thêm này trong web.config của bạn (trong phần appSettings):

<add key="enableSimpleMembership" value="false"/> 
<add key="autoFormsAuthentication" value="false"/> 

EDIT:

Đối với những người hỏi tại sao, nó là một vấn đề được biết mô tả trong MVC 3 release notes Chi tiết khác here

+3

Bạn có thể mở rộng thêm một chút không? Ở đâu trong web.config? Chìa khóa làm gì? Tôi gặp khó khăn khi tìm tài liệu trực tuyến về các khóa đó. –

+0

@Kennet Belenky: Trong phần appSettings – Gregoire

+2

Tôi hiểu. Nó tự động xác định các quy tắc bảo mật và tư cách thành viên để bạn phải ghi đè chúng trước khi thêm các tùy chỉnh. Khôn lanh. –

37

Sau khi nâng cấp một số ứng dụng từ ASP.NET MVC3 lên MVC4, tôi gặp phải lỗi này. Đó là kết quả của các hội đồng WebMatrix (WebMatrix.WebData.dll và WebMatrix.Data.dll). Tôi đã loại bỏ các tham chiếu và hội đồng đó khỏi thư mục/bin và điều đó đã giải quyết vấn đề.

+1

Điều này đã không sửa chữa nó cho tôi – rboarman

+2

@ rboarman - Điều này đã cố định nó cho tôi nhiều lần. Bạn có chắc là các hội đồng không còn nằm trong thư mục/bin? –

+0

Thêm khóa như mô tả ở trên đã sửa nó. Sự hiện diện của WebMatrix.WebData.dll và WebMatrix.Data.dll không tạo nên sự khác biệt nào cả. – rboarman

6

Vâng, tôi vừa gặp lỗi này và do việc vô tình sao chép tệp .cshtml vào thư mục gốc của dự án của tôi. Nó thậm chí không được bao gồm trong dự án. Đã xóa nó và lỗi đã biến mất. Điều này đã được với MVC3 trên IIS7. Tôi tưởng tượng một số người nhận được vấn đề này là trong cùng một chiếc thuyền.

7

@ Ek0nomik là đúng. Chúng tôi đã di chuyển từ MembershipProvider sang ExtendedMembershipProvider mới cho phép chúng tôi tận dụng một số chức năng mới được cung cấp trong không gian tên WebMatrix. Theo mặc định thành viên đơn giản được kích hoạt vì lý do nào đó vì vậy chúng tôi đã vô hiệu hóa nó một cách rõ ràng vì chúng tôi không muốn đi xa như sử dụng SimpleMembershipProvider.

Tất cả chúng ta phải làm là thêm video này vào web.config:

<add key="enableSimpleMembership" value="false"/> 

Có thành viên Simple kích hoạt gây ra các mã khởi động nhà cung cấp để thực hiện trước khi xử lý Application_Start. Cấu trúc ứng dụng của chúng tôi yêu cầu App_Start là điều đầu tiên cần thực hiện. Cá nhân tôi luôn mong đợi điều này nhưng Thành viên đơn giản thay đổi hành vi này. Cẩn thận.

0

Điều này là do bất kỳ một số cuộc gọi Phản ánh nào được thực hiện quá sớm trong một Ứng dụng. Nó chỉ như vậy sẽ xảy ra các đề xuất Web.Config trong câu trả lời khác ngăn cản một cuộc gọi Reflection như vậy được thực hiện. Tuy nhiên, trong trường hợp của tôi:

Tôi đang sử dụng Khung thực thể và chạy update-database. Tôi nhận được:

This method cannot be called during the application's pre-start initialization phase.

Vì hóa ra chúng tôi đã sử dụng một thư viện đã được sửa đổi gần đây để lấy tất cả mã trong tất cả các không gian tên/dự án.Cụ thể, nó được gọi là:

System.Web.Compilation.BuildManager.GetReferencedAssemblies() 

Kaboom. Điều đó gây ra lỗi tối nghĩa này. EF Migration chạy trong một khu vực kỳ lạ nơi ứng dụng chạy một nửa và một nửa không, có nghĩa là phương pháp trên không bao giờ có thể được gọi bằng bất kỳ mã Migrations sẽ kêu gọi.