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? :)


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


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.


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ę.


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.


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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.