ASP.NET: Diese Methode kann während der Initialisierungsphase vor dem Start der Anwendung nicht aufgerufen werden

135

Ich versuche, eine ASP.NET MVC 3-Site unter IIS 6.0 auszuführen.

Derzeit wird beim Anfordern einer Seite vom Server der folgende Fehler angezeigt:

Parser-Fehlermeldung: Diese Methode kann während der Initialisierungsphase vor dem Start der Anwendung nicht aufgerufen werden.

in dieser Zeile:

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

Ich bin völlig ratlos und habe keine Ahnung vom ASP.NET-Anwendungslebenszyklus, geschweige denn von den Unterschieden zwischen 6.0 und 7.0. Das Lesen der MSDN-Seiten schien nicht viel zu helfen.

Hat jemand einen Einblick oder gute Links zur Untersuchung? :) :)

sqwerty
quelle
1
Ich habe das gleiche Problem mit MVC 2 auf dem VS localhost-Webserver (Cassini).
Morten Christiansen
1
Das gleiche Problem (und die gleiche Lösung) scheint auch für MVC 3 unter IIS 7.0 zu gelten.
CrazyPyro
2
Habe auch dieses Problem mit MVC4 & IIS6, mit einem neuen Projekt. Behoben durch Entfernen der Webmatrix. *, Siehe Antwort unten.
Andrew Backer
Ich hatte den gleichen Fehler, aber nicht im Zusammenhang mit einem Mitgliedschaftsanbieter, daher war die akzeptierte Antwort keine Hilfe. Es stellte sich heraus, dass ich einen dummen Fehler gemacht hatte und die Baugruppe nicht im Konfigurationsabschnitt angegeben hatte. Ich habe den Abschnittsnamen in "vollständig qualifizierter Name des Typs, Assembly-Name" geändert, um den Fehler zu beheben.
FishesCycle

Antworten:

253

Fügen Sie dies in Ihre web.config ein (im Abschnitt appSettings):

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

BEARBEITEN:

Für diejenigen , die fragen , warum ist es ein bekanntes Problem in dem mvc 3 beschrieben Release Notes Weitere Details hier

Gregoire
quelle
3
Können Sie das bitte etwas näher erläutern? Wo in der web.config? Was machen die Schlüssel? Ich habe Probleme, eine Online-Dokumentation dieser Schlüssel zu finden.
Kennet Belenky
2
Aha. Es definiert automatisch Sicherheits- und Mitgliedschaftsregeln, sodass Sie diese überschreiben müssen, bevor Sie benutzerdefinierte hinzufügen. Tricky.
Jonathan Allen
4
Ich erstelle ein neues Projekt, dieser Fehler tritt nicht auf und ich muss diese Schlüssel nicht hinzufügen. Bei meinem bestehenden Projekt musste ich diese Schlüssel hinzufügen, um zu funktionieren. Warum?
Ridermansb
2
Warum? Kann jemand bitte auf eine Erklärung / Dokumentation verlinken?
Matt Kocaj
1
Die erste Zeile hat es für mich in MVC4 behoben: <add key = "enableSimpleMembership" value = "false" />
anglesen
39

Nach dem Upgrade einiger meiner Anwendungen von ASP.NET MVC3 auf MVC4 wurde dieser Fehler angezeigt. Dies war ein Ergebnis der WebMatrix-Assemblys (WebMatrix.WebData.dll und WebMatrix.Data.dll). Ich habe diese Referenzen und Assemblys aus dem Verzeichnis / bin entfernt und das Problem wurde behoben.

Justin Helgerson
quelle
2
@rboarman - Dies hat es für mich wiederholt behoben. Sind Sie sicher, dass sich die Assemblys noch nicht im Verzeichnis / bin befinden?
Justin Helgerson
Durch Hinzufügen des Schlüssels wie oben beschrieben wurde das Problem behoben. Das Vorhandensein von WebMatrix.WebData.dll und WebMatrix.Data.dll machte in beiden Fällen keinen Unterschied.
Rboarman
Dies wurde für mich behoben, als ich ein Upgrade von MVC4RC auf RTM durchführte. Ich begann damit, ein neues Projekt zu erstellen und alle zugehörigen Teile zu kopieren. Ich habe keine Codeänderungen vorgenommen, und die web.config hatte auch keine wesentlichen Änderungen. Seltsam.
Andrew Backer
1
Es wurde für mich behoben. Ich befand mich in einer Situation, in der ich einige Dinge für Azure installiert, das Projekt erstellt, entschieden hatte, dass dies nicht das war, was ich wollte, und machte ein Rückgängigmachen über TFS, sodass mein gesamter Code identisch mit dem war, was er war, als er funktionierte. Mein Papierkorb war jedoch etwas schwerer. Das manuelle Löschen der WebMatrix-Assemblys (im Gegensatz zum Aufrufen von Clean für das Projekt) hat funktioniert. Danke Ek0nomik.
Yetti
Vielen Dank. Das hat es für mich behoben.
Corix010
8

@ Ek0nomik ist richtig. Wir sind von der MembershipProviderauf die neue ExtendedMembershipProviderumgestiegen, um einige der neuen Funktionen des WebMatrix- Namespace nutzen zu können. Standardmäßig ist die einfache Mitgliedschaft aus irgendeinem Grund aktiviert, daher mussten wir sie explizit deaktivieren, da wir nicht so weit gehen wollten, die zu verwenden SimpleMembershipProvider.

Alles was wir tun mussten, war dies zur web.config hinzuzufügen:

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

Wenn die einfache Mitgliedschaft aktiviert war, wurde der Provider-Initialisierungscode vor dem Application_Start-Handler ausgeführt. Unsere App-Struktur erfordert, dass App_Start als erstes ausgeführt wird. Persönlich würde ich das immer erwarten, aber Simple Membership ändert dieses Verhalten. In acht nehmen.

Andy McCluggage
quelle
6

Nun, ich habe gerade diesen Fehler erhalten, der darauf zurückzuführen ist, dass ich versehentlich eine .cshtml in das Stammverzeichnis meines Projekts kopiert habe. Es war nicht einmal im Projekt enthalten. Löschte das und der Fehler ging weg. Dies war mit MVC3 auf IIS7. Ich stelle mir vor, dass einige der Leute, die dieses Problem bekommen, im selben Boot sitzen.

David Hammond
quelle
2

Dies wird dadurch verursacht, dass eine Reihe von Reflection-Aufrufen in einer Anwendung zu früh ausgeführt wird. Es ist einfach so, dass die Web.Config-Vorschläge in anderen Antworten einen solchen Reflection-Aufruf verhinderten. In meinem Fall jedoch:

Ich verwende Entity Framework und bin gelaufen update-database. Ich habe:

Diese Methode kann während der Initialisierungsphase vor dem Start der Anwendung nicht aufgerufen werden.

Wie sich herausstellte, hatten wir Code, der eine Bibliothek verwendete, die kürzlich geändert wurde, um den gesamten Code in allen Namespaces / Projekten abzurufen. Insbesondere hieß es:

System.Web.Compilation.BuildManager.GetReferencedAssemblies()

Kaboom. Das verursachte diesen obskuren Fehler. EF-Migrationen werden in einer verrückten Zone ausgeführt, in der die Anwendung zur Hälfte und zur Hälfte nicht ausgeführt wird. Dies bedeutet, dass die oben beschriebene Methode von keinem Code aufgerufen werden kann, den Migrations aufrufen würde.

Chris Moschini
quelle