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 не очень помогло.

Есть ли у кого-нибудь понимание или хорошие ссылки для расследования? :)

sqwerty
источник
1
У меня та же проблема с MVC 2 на веб-сервере VS localhost (Кассини).
Мортен Кристиансен
1
Эта та же самая проблема (и решение), кажется, применима к MVC 3 на IIS 7.0 также.
CrazyPyro
2
Также есть эта проблема с MVC4 и IIS6, с новым проектом. Исправлено путем удаления webmatrix. *, См. Ответ ниже.
Эндрю Бакер
У меня была та же ошибка, но не в контексте поставщика членства, поэтому принятый ответ не помог. Оказывается, я допустил глупую ошибку, не указав сборку в разделе конфигурации. Я изменил имя раздела на «полностью.qualified.name.of.type, assembly.name», чтобы убрать ошибку.
FishesCycle

Ответы:

253

Добавьте это в ваш web.config (в разделе appSettings):

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

РЕДАКТИРОВАТЬ:

Для тех, кто спрашивает, почему, это известная проблема, описанная в примечаниях к выпуску mvc 3 Подробнее здесь

Gregoire
источник
3
Не могли бы вы немного рассказать об этом? Где в web.config? Что делают ключи? У меня проблемы с поиском онлайн-документации по этим ключам.
Кеннет Беленький
2
Понимаю. Он автоматически определяет правила безопасности и членства, поэтому вы должны переопределить их, прежде чем добавлять пользовательские. Tricky.
Джонатан Аллен
4
Я создаю новый проект, эта ошибка не возникает, и мне не нужно добавлять эти ключи. В моем существующем проекте мне пришлось добавить эти ключи для работы, почему?
ridermansb
2
Зачем? Может кто-нибудь, пожалуйста, ссылку на некоторые объяснения / документацию?
Matt Kocaj
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 вручную (в отличие от вызова Clean в проекте) работала. Спасибо Эк0номик.
Йетти
Спасибо. Это исправило это для меня.
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 в других ответах не позволили сделать один такой вызов Reflection. В моем случае, однако:

Я использую Entity Framework и побежал update-database. Я получил:

Этот метод не может быть вызван на этапе начальной инициализации приложения.

Как оказалось, у нас был код, который использовал библиотеку, которая была недавно изменена, чтобы получить весь код во всех пространствах имен / проектах. В частности, это называется:

System.Web.Compilation.BuildManager.GetReferencedAssemblies()

Kaboom. Это вызвало эту неясную ошибку. EF Migrations запускаются в странной зоне, где приложение наполовину работает, а наполовину нет, что означает, что вышеупомянутый метод никогда не может быть вызван ни одним кодом, который вызовет Migrations.

Крис Москини
источник