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


135

Tôi đang cố gắng để có được một trang web ASP.NET MVC 3 chạy trên IIS 6.0.

Hiện tại khi tôi yêu cầu một trang từ máy chủ, nó sẽ báo lỗi sau:

Thông báo lỗi phân tích cú pháp: 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 ứng dụng.

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 manh mối về vòng đời của ứng dụng ASP.NET, chứ đừng nói đến sự khác biệt giữa 6.0 và 7.0. Đọc qua các trang MSDN trên đó dường như không giúp được gì nhiều.

Có ai có cái nhìn sâu sắc hoặc bất kỳ liên kết tốt để điều tra? :)


1
Tôi có cùng một vấn đề với MVC 2 trên máy chủ web VS localhost (Cassini).
Morten Christiansen

1
Vấn đề tương tự (và độ phân giải) này dường như cũng có thể á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. Đã sửa lỗi bằng cách xóa webmatrix. *, Xem câu trả lời bên dưới.
Andrew Backer

Tôi đã có cùng một lỗi, nhưng không phải trong bối cảnh của một nhà cung cấp thành viên, vì vậy câu trả lời được chấp nhận là không có ích. Hóa ra tôi đã phạm một sai lầm ngu ngốc, không chỉ định lắp ráp trong phần cấu hình. Tôi đã thay đổi tên phần thành "full.qualified.name.of.type, assembly.name" để xóa lỗi.
FishesCycl

Câu trả lời:


253

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

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

BIÊN TẬP:

Đối với những người hỏi tại sao, đó là một vấn đề đã biết được mô tả trong ghi chú phát hành mvc 3 Chi tiết khác tại đây


3
Bạn có thể vui lòng mở rộng về điều đó một chút? Ở đâu trong web.config? Các phím 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 đó.
Kennet Belenky

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

4
Tôi tạo một dự án mới, lỗi này không xảy ra và tôi không cần thêm các khóa này. Trong dự án hiện tại của tôi, tôi đã phải thêm các khóa này để làm việc, tại sao ??
Ridermansb

2
Tại sao? Ai đó có thể xin vui lòng liên kết đến một số giải thích / tài liệu?
Matt Kocaj

1
Dòng đầu tiên đã sửa nó cho tôi trong MVC4: <add key = "enableSimpleMembership" value = "false" />
angensesen

39

Sau khi nâng cấp một số ứng dụng của tôi từ ASP.NET MVC3 lên MVC4, tôi đã gặp 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 đã xóa các tham chiếu và tập hợp đó khỏi thư mục / bin và vấn đề này đã được giải quyết.


2
@rboarman - Điều này đã sửa nó cho tôi nhiều lần. Bạn có chắc rằng các hội đồng vẫn không ngồi trong thư mục / bin?
Justin Helgerson

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 cũng không tạo ra sự khác biệt.
rboarman

Điều này đã sửa nó cho tôi khi tôi nâng cấp từ MVC4RC lên RTM. Tôi bắt đầu bằng cách tạo một dự án mới và sao chép tất cả các bit liên quan. Tôi đã không thay đổi mã và web.config cũng không có thay đổi đáng kể. Lạ thật.
Andrew Backer

1
Đã sửa nó cho tôi. Tôi đã ở trong một tình huống mà tôi đã cài đặt một vài thứ cho Azure, xây dựng dự án, quyết định đó không phải là điều tôi muốn và đã hoàn tác thông qua TFS, vì vậy tất cả mã của tôi là SẮC với những gì nó hoạt động. Tuy nhiên, thư mục bin của tôi nặng hơn một chút. Việc xóa các hội đồng WebMatrix bằng tay (trái ngược với việc gọi Clean trên dự án) đã hoạt động. Cảm ơn Ek0nomik.
Yetti

Cảm ơn. CÁi này đã sửa nó giúp tôi.
corix010

8

@ Ek0nomik là đúng. Chúng tôi đã chuyển từ MembershipProvidermới sang ExtendedMembershipProvidercho 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, Tư cách thành viên đơn giản được kích hoạt vì một số lý do vì vậy chúng tôi phải vô hiệu hóa nó một cách rõ ràng vì chúng tôi không muốn sử dụng SimpleMembershipProvider.

Tất cả những gì chúng tôi phải làm là thêm phần này vào web.config:

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

Việc bật Tư cách thành viên đơn giản đã khiến mã khởi tạo Nhà cung cấp thực thi trước trình 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 để thực thi. Cá nhân tôi luôn mong đợi điều này nhưng Tư cách thành viên đơn giản sẽ thay đổi hành vi này. Coi chừng.


6

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


2

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

Tôi đang sử dụng Entity Framework và đã chạy update-database. Tôi đã nhận:

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 ứng dụng.

Hóa ra chúng tôi đã có mã 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. Di chuyển EF 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 thức trên không bao giờ có thể được gọi bởi bất kỳ mã Di chuyển nào sẽ gọi.

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.