ASP.NET: tej metody nie można wywołać na etapie inicjalizacji przed uruchomieniem aplikacji

135

Próbuję uzyskać witrynę ASP.NET MVC 3 działającą w usługach IIS 6.0.

Obecnie, gdy żądam strony z serwera, pojawia się następujący błąd:

Komunikat o błędzie analizatora: tej metody nie można wywołać na etapie inicjalizacji przed uruchomieniem aplikacji.

w tej linii:

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

Jestem kompletnie zaskoczony i nie mam pojęcia o cyklu życia aplikacji ASP.NET, nie mówiąc już o różnicach między 6.0 a 7.0. Czytanie stron MSDN nie wydawało się zbyt pomocne.

Czy ktoś ma jakieś spostrzeżenia lub dobre linki do dochodzenia? :)

sqwerty
źródło
1
Mam ten sam problem z MVC 2 na serwerze WWW VS localhost (Cassini).
Morten Christiansen
1
Ten sam problem (i rozwiązanie) wydaje się mieć również zastosowanie do MVC 3 w usługach IIS 7.0.
CrazyPyro
2
Mam również ten problem z MVC4 i IIS6, z nowym projektem. Naprawiono przez usunięcie webmatrix. *, Patrz odpowiedź poniżej.
Andrew Backer
Miałem ten sam błąd, ale nie w kontekście dostawcy członkostwa, więc zaakceptowana odpowiedź nie była pomocna. Okazuje się, że popełniłem głupi błąd, nie określając zespołu w sekcji konfiguracji. Zmieniłem nazwę sekcji na „full.qualified.name.of.type, assembly.name”, aby usunąć błąd.
FishesCycle

Odpowiedzi:

253

Dodaj to w swoim web.config (w sekcji appSettings):

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

EDYTOWAĆ:

Dla tych, którzy pytają dlaczego, jest to znany problem opisany w informacjach o wydaniu mvc 3 Więcej szczegółów tutaj

Gregoire
źródło
3
Czy możesz to trochę rozwinąć? Gdzie w pliku web.config? Co robią klucze? Mam problem ze znalezieniem dokumentacji online tych kluczy.
Kennet Belenky
2
Widzę. Automatycznie definiuje zasady bezpieczeństwa i członkostwa, więc musisz je zastąpić, zanim dodasz niestandardowe. Zdradliwy.
Jonathan Allen
4
Tworzę nowy projekt, ten błąd nie występuje i nie muszę dodawać tych kluczy. W moim istniejącym projekcie musiałem dodać te klucze do pracy, dlaczego ??
ridermansb
2
Czemu? Czy ktoś może podać link do jakiegoś wyjaśnienia / dokumentacji?
Matt Kocaj,
1
Pierwsza linia naprawiła to dla mnie w MVC4: <add key = "enableSimpleMembership" value = "false" />
angularsen
39

Po uaktualnieniu niektórych moich aplikacji z ASP.NET MVC3 do MVC4 pojawia się ten błąd. Było to wynikiem zespołów WebMatrix (WebMatrix.WebData.dll i WebMatrix.Data.dll). Usunąłem te odwołania i zestawy z katalogu / bin i to rozwiązało problem.

Justin Helgerson
źródło
2
@rboarman - To naprawiało problem wielokrotnie. Czy na pewno zestawy nie znajdują się nadal w katalogu / bin?
Justin Helgerson
Dodanie klucza zgodnie z powyższym opisem rozwiązało problem. Obecność plików WebMatrix.WebData.dll i WebMatrix.Data.dll nie miała żadnego znaczenia.
rboarman
Naprawiło to dla mnie, kiedy uaktualniłem MVC4RC do RTM. Zacząłem od stworzenia nowego projektu i skopiowania wszystkich powiązanych fragmentów. Nie wprowadziłem żadnych zmian w kodzie, a plik web.config również nie miał żadnych znaczących zmian. Dziwne.
Andrew Backer
1
Naprawiłem to dla mnie. Byłem w sytuacji, w której zainstalowałem kilka rzeczy dla Azure, zbudowałem projekt, zdecydowałem, że to nie jest to, czego chcę i zrobiłem cofnięcie za pomocą TFS, więc cały mój kod był IDENTYCZNY do tego, co był, gdy działał. Jednak mój folder bin był nieco cięższy. Wyczyszczenie zestawów WebMatrix ręcznie (w przeciwieństwie do wywoływania Clean w projekcie) zadziałało. Dzięki Ek0nomik.
Yetti
Dzięki. To naprawiło to dla mnie.
corix010
8

@ Ek0nomik ma rację. Przeprowadziliśmy migrację z wersji MembershipProviderdo nowej, ExtendedMembershipProviderco pozwala nam skorzystać z niektórych nowych funkcji oferowanych w przestrzeni nazw WebMatrix . Domyślnie proste członkostwo jest włączone z jakiegoś powodu, więc musieliśmy je wyraźnie wyłączyć, ponieważ nie chcieliśmy posuwać się tak daleko, jak używać SimpleMembershipProvider.

Wszystko, co musieliśmy zrobić, to dodać to do pliku web.config:

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

Włączenie prostego członkostwa spowodowało wykonanie kodu inicjalizacji dostawcy przed obsługą Application_Start. Nasza struktura aplikacji wymaga, aby App_Start był pierwszą rzeczą do wykonania. Osobiście zawsze bym się tego spodziewał, ale proste członkostwo zmienia to zachowanie. Strzec się.

Andy McCluggage
źródło
6

Cóż, właśnie dostałem ten błąd i wynikał on z przypadkowego skopiowania pliku .cshtml do katalogu głównego mojego projektu. Nie było nawet uwzględnione w projekcie. Usunięto to, a błąd zniknął. Tak było w przypadku MVC3 w IIS7. Wyobrażam sobie, że niektórzy ludzie mający ten problem są na tej samej łodzi.

David Hammond
źródło
2

Jest to spowodowane przez dowolną liczbę wywołań Reflection wykonanych zbyt wcześnie w aplikacji. Tak się składa, że ​​sugestie Web.Config zawarte w innych odpowiedziach uniemożliwiły wykonanie takiego wywołania Reflection. W moim przypadku jednak:

Używam Entity Framework i uruchomiłem update-database. Mam:

Tej metody nie można wywołać podczas fazy inicjowania aplikacji przed uruchomieniem.

Jak się okazuje, mieliśmy kod, który korzystał z biblioteki, która została niedawno zmodyfikowana, aby uzyskać cały kod we wszystkich przestrzeniach nazw / projektach. Konkretnie nazywało się to:

System.Web.Compilation.BuildManager.GetReferencedAssemblies()

Kaboom. To spowodowało ten niejasny błąd. Migracje EF są uruchamiane w dziwnej strefie, w której aplikacja jest w połowie uruchomiona, a w połowie nie, co oznacza, że ​​powyższej metody nigdy nie można wywołać przez żaden kod, który wywołałby migracje.

Chris Moschini
źródło