ASP.NET: Цей метод не можна викликати під час етапу ініціалізації перед запуском програми


135

Я намагаюся отримати сайт ASP.NET MVC 3, який працює на IIS 6.0.

На даний момент, коли я запитую сторінку на сервері, вона видає таку помилку:

Повідомлення про помилку аналізатора: Цей метод не можна викликати під час етапу ініціалізації перед запуском програми.

у цьому рядку:

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

Я повністю спотикаючись і не маю багато поняття про життєвий цикл додатків ASP.NET, не кажучи вже про відмінності між 6.0 і 7.0. Читання сторінок MSDN на ньому, здається, не дуже допомогло.

Хтось має якісь уявлення або якісь хороші посилання для розслідування? :)


1
У мене така ж проблема з MVC 2 на веб-сервері VS localhost (Cassini).
Morten Christiansen

1
Ця ж проблема (і її вирішення), здається, застосовується і до MVC 3 на IIS 7.0.
CrazyPyro

2
Також є ця проблема з MVC4 & IIS6, з новим проектом. Виправлено видаленням веб-матриці. *, Див. Відповідь нижче.
Ендрю Беккер

У мене була така ж помилка, але не в контексті постачальника членства, тому прийнята відповідь не допомогла. Виявляється, я зробив дурну помилку, не вказавши збірку в розділі конфігурації. Я змінив назву розділу на "full.qualified.name.of.type, Assembly.name", щоб очистити помилку.
FisherCycle

Відповіді:


253

Додайте це у свій web.config (у розділі Налаштування додатків):

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

Редагувати:

Для тих, хто запитує, чому, це відоме питання, описане в примітках до випуску mvc 3 Детальніше тут


3
Чи можете ви трохи розширити це? Де в web.config? Що роблять ключі? У мене виникають проблеми з онлайн-документацією цих ключів.
Кеннет Беленький

2
Я бачу. Він автоматично визначає правила безпеки та правила членства, тому вам доведеться їх переосмислити, перш ніж додавати власні. Хитрий.
Джонатан Аллен

4
Я створюю новий проект, ця помилка не виникає, і мені не потрібно додавати ці ключі. У своєму існуючому проекті мені довелося додати ці ключі для роботи, чому ??
ridermansb

2
Чому? Може хтось, будь ласка, посилається на якесь пояснення / документацію?
Метт Кокай

1
Перший рядок зафіксував його для MVC4: <add key = "enableSimpleMembership" value = "false" />
angularsen

39

Після оновлення деяких моїх програм з ASP.NET MVC3 до MVC4 я отримував цю помилку. Це було результатом збірок WebMatrix (WebMatrix.WebData.dll і WebMatrix.Data.dll). Я видалив ці посилання та збірки з каталогу / bin, які вирішили проблему.


2
@rboarman - Це виправляло це для мене неодноразово. Ви впевнені, що збірки ще не сидять у каталозі / bin?
Джастін Гельгерсон

Додавши ключ, як описано вище, виправили його. Наявність WebMatrix.WebData.dll і WebMatrix.Data.dll не змінило жодного випадку.
rboarman

Це вирішило для мене, коли я перейшов з MVC4RC до RTM. Я почав, створивши новий проект і скопіювавши всі відповідні біти. Я не вніс змін у коді, і web.config не зазнав суттєвих змін. Дивно.
Ендрю Беккер

1
Виправлено це для мене. Я опинився в ситуації, коли я встановив кілька речей для Azure, створив проект, вирішив, що це не те, чого я хотів, і скасував через TFS, тому весь мій код був ІДЕНТИЧНИМ щодо того, що було, коли він працював. Однак моя папка була трохи важча. Очищення збірок WebMatrix працювало вручну (на відміну від виклику Очистити в проекті). Спасибі Ek0nomik
Йетті

Дякую. Це зафіксувало це для мене.
corix010

8

@ Ek0nomik має рацію. Ми перейшли від MembershipProviderнового до нового, ExtendedMembershipProviderщо дозволяє скористатися деякими новими функціональними можливостями, пропонованими у просторі імен WebMatrix . За замовчуванням просте членство ввімкнено з якоїсь причини, тому нам довелося чітко його відключити, оскільки ми не хотіли йти так далеко, як використовувати SimpleMembershipProvider.

Все, що нам потрібно було зробити, - це додати це до web.config:

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

Увімкнення простого членства призвело до виконання коду ініціалізації Провайдера перед обробником Application_Start. Наша структура додатків вимагає, щоб першим ділом було виконано App_Start. Особисто я завжди очікував цього, але Просте членство змінює цю поведінку. Остерігайся.


6

Ну, я щойно отримав цю помилку, і вона стала причиною випадкового скопіювання .cshtml у корінь мого проекту. Він навіть не був включений у проект. Видалено це, і помилка усунулася. Це було з MVC3 на IIS7. Я думаю, що деякі люди, які отримують цю проблему, знаходяться в одному човні.


2

Це спричинене тим, що будь-який з декількох дзвінків Reflection робиться занадто рано в Заявці. Так трапляється, що пропозиції Web.Config в інших відповідях не дозволяють зробити один такий дзвінок відбиття. У моєму випадку, однак:

Я використовую Entity Framework і побіг update-database. Я отримав:

Цей метод не можна викликати під час фази ініціалізації перед запуском програми.

Як виявляється, у нас був код, який використовував бібліотеку, яку нещодавно змінили, щоб отримати весь код у всіх просторах імен / проектах. Зокрема, він називав:

System.Web.Compilation.BuildManager.GetReferencedAssemblies()

Кабум. Це спричинило цю незрозумілу помилку. EF Міграція запускається у дивовижній зоні, де програма наполовину запущена, а наполовину ні, тобто вищезазначений метод ніколи не може бути викликаний жодним кодом, за допомогою якого міграція закликає.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.