ASP.NET: cette méthode ne peut pas être appelée pendant la phase d'initialisation de pré-démarrage de l'application

135

J'essaie d'obtenir un site ASP.NET MVC 3 fonctionnant sur IIS 6.0.

Actuellement, lorsque je demande une page au serveur, cela donne l'erreur suivante:

Message d'erreur de l'analyseur: cette méthode ne peut pas être appelée pendant la phase d'initialisation de pré-démarrage de l'application.

sur cette ligne:

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

Je suis complètement perplexe et je n'ai pas beaucoup d'indices sur le cycle de vie des applications ASP.NET, sans parler des différences entre 6.0 et 7.0. La lecture des pages MSDN dessus n'a pas semblé beaucoup aider.

Quelqu'un a-t-il un aperçu ou de bons liens pour enquêter? :)

sqwerty
la source
1
J'ai le même problème avec MVC 2 sur le serveur Web VS localhost (Cassini).
Morten Christiansen
1
Ce même problème (et résolution) semble également s'appliquer à MVC 3 sur IIS 7.0.
CrazyPyro
2
Avez également ce problème avec MVC4 et IIS6, avec un nouveau projet. Corrigé en supprimant webmatrix. *, Voir la réponse ci-dessous.
Andrew Backer
J'ai eu la même erreur, mais pas dans le contexte d'un fournisseur d'adhésion, donc la réponse acceptée n'a pas été utile. Il s'avère que j'avais fait une erreur stupide, ne spécifiant pas l'assemblage dans la section de configuration. J'ai changé le nom de la section en "full.qualified.name.of.type, assembly.name" pour effacer l'erreur.
FishesCycle

Réponses:

253

Ajoutez ceci dans votre web.config (dans la section appSettings):

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

ÉDITER:

Pour ceux qui demandent pourquoi, il s'agit d'un problème connu décrit dans les notes de version de mvc 3 Plus de détails ici

Grégoire
la source
3
Pouvez-vous nous en dire plus un peu plus? Où dans le web.config? Que font les clés? J'ai du mal à trouver la documentation en ligne de ces clés.
Kennet Belenky
2
Je vois. Il définit automatiquement les règles de sécurité et d'appartenance, vous devez donc les remplacer avant d'en ajouter des personnalisées. Rusé.
Jonathan Allen
4
Je crée un nouveau projet, cette erreur ne se produit pas et je n'ai pas besoin d'ajouter ces clés. Sur mon projet existant, j'ai dû ajouter ces clés pour travailler, pourquoi ??
ridermansb
2
Pourquoi? Quelqu'un peut-il s'il vous plaît un lien vers une explication / documentation?
Matt Kocaj
1
La première ligne l'a corrigé pour moi dans MVC4: <add key = "enableSimpleMembership" value = "false" />
angularsen
39

Après avoir mis à niveau certaines de mes applications d'ASP.NET MVC3 vers MVC4, j'obtenais cette erreur. C'était le résultat des assemblys WebMatrix (WebMatrix.WebData.dll et WebMatrix.Data.dll). J'ai supprimé ces références et assemblages du répertoire / bin et cela a résolu le problème.

Justin Helgerson
la source
2
@rboarman - Cela m'a corrigé à plusieurs reprises. Êtes-vous sûr que les assemblys ne se trouvent pas toujours dans le répertoire / bin?
Justin Helgerson
L'ajout de la clé comme décrit ci-dessus l'a corrigé. La présence de WebMatrix.WebData.dll et WebMatrix.Data.dll n'a pas fait de différence dans les deux cas.
rboarman
Cela a résolu le problème pour moi lorsque je suis passé de MVC4RC à RTM. J'ai commencé par créer un nouveau projet et en copiant tous les éléments associés. Je n'ai fait aucun changement de code, et le web.config n'a pas non plus de changements significatifs. Étrange.
Andrew Backer
1
Corrigé pour moi. J'étais dans une situation où j'ai installé quelques éléments pour Azure, construit le projet, décidé que ce n'était pas ce que je voulais et fait une annulation via TFS, donc tout mon code était IDENTIQUE à ce qu'il était quand il fonctionnait. Cependant, mon dossier bin était un peu plus lourd. La suppression manuelle des assemblys WebMatrix (par opposition à l'appel de Clean sur le projet) a fonctionné. Merci Ek0nomik.
Yetti
Merci. Cela a résolu le problème pour moi.
corix010
8

@ Ek0nomik a raison. Nous avons migré du MembershipProvidervers le nouveau, ExtendedMembershipProviderce qui nous permet de profiter de certaines des nouvelles fonctionnalités offertes dans l' espace de noms WebMatrix . Par défaut, l'appartenance simple est activée pour une raison quelconque, nous avons donc dû la désactiver explicitement car nous ne voulions pas aller jusqu'à utiliser le SimpleMembershipProvider.

Tout ce que nous avions à faire était d'ajouter ceci au web.config:

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

L'activation de l'appartenance simple entraînait l'exécution du code d'initialisation du fournisseur avant le gestionnaire Application_Start. Notre structure d'application nécessite App_Start pour être la première chose à exécuter. Personnellement, je m'attendrais toujours à cela, mais l'appartenance simple change ce comportement. Il faut se méfier.

Andy McCluggage
la source
6

Eh bien, je viens de recevoir cette erreur, et cela résulte de la copie accidentelle d'un .cshtml à la racine de mon projet. Ce n'était même pas inclus dans le projet. Supprimé cela et l'erreur a disparu. C'était avec MVC3 sur IIS7. J'imagine que certaines des personnes qui ont ce problème sont dans le même bateau.

David Hammond
la source
2

Cela est dû au fait que l'un des nombreux appels Reflection est effectué trop tôt dans une application. Il se trouve que les suggestions Web.Config dans d'autres réponses ont empêché un tel appel Reflection d'être effectué. Dans mon cas cependant:

J'utilise Entity Framework et j'ai couru update-database. J'ai eu:

Cette méthode ne peut pas être appelée pendant la phase d'initialisation de pré-démarrage de l'application.

En fait, nous avions du code qui utilisait une bibliothèque qui a été récemment modifiée pour obtenir tout le code dans tous les espaces de noms / projets. Plus précisément, il a appelé:

System.Web.Compilation.BuildManager.GetReferencedAssemblies()

Kaboom. Cela a causé cette erreur obscure. Les migrations EF s'exécutent dans une zone bizarre où l'application est à moitié en cours d'exécution et à moitié non, ce qui signifie que la méthode ci-dessus ne peut jamais être appelée par le code que les migrations appelleraient.

Chris Moschini
la source