ASP.NET: Metode ini tidak dapat dipanggil selama tahap inisialisasi pra-mulai aplikasi

135

Saya mencoba untuk mendapatkan situs ASP.NET MVC 3 yang berjalan di IIS 6.0.

Saat ini ketika saya meminta halaman dari server itu memberikan kesalahan berikut:

Pesan Kesalahan Parser: Metode ini tidak dapat dipanggil selama tahap inisialisasi pra-mulai aplikasi.

di baris ini:

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

Saya benar-benar bingung dan tidak memiliki banyak petunjuk tentang siklus hidup aplikasi ASP.NET, apalagi perbedaan antara 6.0 dan 7.0. Membaca halaman MSDN di dalamnya sepertinya tidak banyak membantu.

Apakah ada yang punya wawasan atau tautan bagus untuk penyelidikan? :)

sqwerty
sumber
1
Saya memiliki masalah yang sama dengan MVC 2 di server web VS localhost (Cassini).
Morten Christiansen
1
Masalah yang sama (dan resolusi) tampaknya juga berlaku untuk MVC 3 di IIS 7.0.
CrazyPyro
2
Juga punya masalah ini dengan MVC4 & IIS6, dengan proyek baru. Diperbaiki dengan menghapus matriks web. *, Lihat jawaban di bawah ini.
Andrew Backer
Saya mengalami kesalahan yang sama, tetapi tidak dalam konteks penyedia keanggotaan, jadi jawaban yang diterima adalah tidak membantu. Ternyata saya telah membuat kesalahan bodoh, tidak menentukan perakitan di bagian konfigurasi. Saya mengubah nama bagian menjadi "fully.qualified.name.of.type, assembly.name" untuk menghapus kesalahan.
FishesCycle

Jawaban:

253

Tambahkan ini di web.config Anda (di bagian appSettings):

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

EDIT:

Bagi mereka yang bertanya mengapa, ini adalah masalah umum yang dijelaskan dalam catatan rilis MVC 3 Detail selengkapnya di sini

Gregoire
sumber
3
Bisakah Anda menjelaskannya sedikit? Di mana di web.config? Apa yang dilakukan kuncinya? Saya kesulitan menemukan dokumentasi online dari kunci tersebut.
Kennet Belenky
2
Saya melihat. Ini secara otomatis menentukan aturan keamanan dan keanggotaan sehingga Anda harus menggantinya sebelum Anda menambahkan aturan khusus. Rumit.
Jonathan Allen
4
Saya membuat proyek baru, kesalahan ini tidak terjadi, dan saya tidak perlu menambahkan kunci ini. Pada proyek saya yang sudah ada, saya harus menambahkan kunci ini agar berfungsi, mengapa ??
ridermansb
2
Mengapa? Bisakah seseorang menautkan ke beberapa penjelasan / dokumentasi?
Matt Kocaj
1
Baris pertama memperbaikinya untuk saya di MVC4: <add key = "enableSimpleMembership" value = "false" />
angularsen
39

Setelah memutakhirkan beberapa aplikasi saya dari ASP.NET MVC3 ke MVC4, saya mendapatkan kesalahan ini. Itu adalah hasil dari majelis WebMatrix (WebMatrix.WebData.dll dan WebMatrix.Data.dll). Saya menghapus referensi dan rakitan tersebut dari direktori / bin dan yang menangani masalah tersebut.

Justin Helgerson
sumber
2
@rboarman - Ini telah memperbaikinya untuk saya berulang kali. Apakah Anda yakin assemblies tidak masih ada di direktori / bin?
Justin Helgerson
Menambahkan kunci seperti yang dijelaskan di atas memperbaikinya. Kehadiran WebMatrix.WebData.dll dan WebMatrix.Data.dll juga tidak membuat perbedaan.
rboarman
Ini memperbaikinya untuk saya ketika saya meningkatkan dari MVC4RC ke RTM. Saya mulai dengan membuat proyek baru dan menyalin semua bagian terkait. Saya tidak membuat perubahan kode, dan web.config juga tidak memiliki perubahan signifikan. Aneh.
Andrew Backer
1
Memperbaiki itu untuk saya. Saya berada dalam situasi di mana saya menginstal beberapa hal untuk Azure, membangun proyek, memutuskan bahwa itu bukan yang saya inginkan dan melakukan pengurungan melalui TFS, jadi semua kode saya IDENTIS dengan apa itu ketika berfungsi. Namun, folder bin saya sedikit lebih berat. Membersihkan rakitan WebMatrix secara manual (sebagai lawan dari memanggil Bersihkan pada proyek) bekerja. Terima kasih Ek0nomik.
Yetti
Terima kasih. Ini memperbaikinya untuk saya.
corix010
8

@ Ek0nomik benar. Kami bermigrasi dari yang MembershipProviderbaru ExtendedMembershipProvidersehingga memungkinkan kami memanfaatkan beberapa fungsi baru yang ditawarkan di namespace WebMatrix . Secara default Keanggotaan Sederhana diaktifkan karena beberapa alasan jadi kami harus menonaktifkannya secara eksplisit karena kami tidak ingin menggunakan ekstensi SimpleMembershipProvider.

Yang harus kami lakukan hanyalah menambahkan ini ke web.config:

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

Memiliki Simple Membership yang diaktifkan menyebabkan kode inisialisasi Penyedia dijalankan sebelum handler Application_Start. Struktur aplikasi kita membutuhkan App_Start untuk menjadi yang pertama dijalankan. Secara pribadi saya akan selalu mengharapkan ini tetapi Keanggotaan Sederhana mengubah perilaku ini. Awas.

Andy McCl Luggage
sumber
6

Nah, saya baru saja mendapatkan kesalahan ini, dan ini diakibatkan oleh tidak sengaja menyalin .cshtml ke root proyek saya. Itu bahkan tidak termasuk dalam proyek. Menghapus itu dan kesalahannya hilang. Ini dengan MVC3 di IIS7. Saya membayangkan beberapa orang yang mengalami masalah ini berada di perahu yang sama.

David Hammond
sumber
2

Hal ini disebabkan oleh salah satu dari sejumlah panggilan Refleksi yang dilakukan terlalu dini dalam Aplikasi. Kebetulan saran Web.Config dalam jawaban lain mencegah salah satu panggilan Refleksi dibuat. Namun dalam kasus saya:

Saya menggunakan Entity Framework, dan menjalankan update-database. Saya mendapatkan:

Metode ini tidak dapat dipanggil selama fase inisialisasi pra-mulai aplikasi.

Ternyata kami memiliki kode yang menggunakan pustaka yang baru saja dimodifikasi untuk mendapatkan semua kode di semua ruang nama / proyek. Secara khusus, itu disebut:

System.Web.Compilation.BuildManager.GetReferencedAssemblies()

Kaboom. Itu menyebabkan kesalahan tidak jelas ini. Migrasi EF berjalan di zona aneh di mana aplikasi setengah berjalan dan setengah lagi tidak, yang berarti metode di atas tidak pernah dapat dipanggil oleh kode apa pun yang akan dipanggil oleh Migrasi.

Chris Moschini
sumber