ASP.NET MVC 3 - операция может дестабилизировать среду выполнения
У меня есть приложение MVC3.0 (.Net 4.0), которое отлично работает на компьютере для разработки под Windows 7 (с VS2010). Это же приложение отлично работает на одном из серверов Windows 8 с IIS 7.
Тем не менее, то же самое приложение выдает исключение ниже на другом Windows 8 Server с IIS7.
Операция может дестабилизировать время выполнения.
Трассировки стека:
[VerificationException: операция может дестабилизировать среду выполнения.] System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.BeginProcessRequest(HttpContext context, AsyncCallback cb, Object extraData) System.Web.CallHandlerExecutionSte.Hecler.ecution.Ep () System.Web.HttpApplication.ExecuteStep(шаг IExecutionStep, логический и завершен синхронно)
Пожалуйста, кто-то может помочь мне понять, что вызывает эту проблему?
Это.NET Framework 4.0? (Я проверил, что на обоих серверах установлена .Net Framework 4.0)
Это проблема IIS и MVC 3.0? (Нужно ли устанавливать MVC 3.0 отдельно для запуска IIS?)
Как настроить веб-приложение для работы в режиме FULL TRUST в IIS 7?
Или полностью что-то еще (попытался зарегистрировать iis с spnet_regiis.exe -ir тоже не помогло)
Нужно ли устанавливать этот http://www.microsoft.com/en-us/download/details.aspx?id=1491 на веб-сервер?
Любая помощь будет оценена.
2 ответа
VerificationException
генерируется, когда JIT-компилятор находит несоответствующую информацию о типе в сборках или неверные инструкции IL. Например, несовпадение сигнатур методов (или типов возврата) между вызывающими и вызываемым методом (когда сигнатура метода изменяется, а зависимые сборки не перекомпилируются).
Для решения проблемы вы можете использовать peverify
проверить сборки:
peverify MyCompany.WebAppMainAssembly.dll
Он скажет, какой участник вызывает конфликт. Что-то вроде found <method sig>, expected <expected signature>
, Теперь вы знаете, какая сборка вызвала проблему. Переустановите его в GAC, если это необходимо. MVC, EF и Unity имеют установщики MSI, или установить вручную...
Кстати, чтобы запустить peverify
Открой Visual Studio Command Prompt
или искать в C:\Program Files (x86)\Microsoft SDKs\Windows\<winver>\Bin
(этот путь может немного измениться).
Возможно, проблема связана с этим исправлением: http://support.microsoft.com/kb/2748645
Основываясь на вашем объяснении проблемы и тестах, которые вы уже сделали, эта ошибка в структуре выглядит как наиболее вероятная причина. Даже если вы нацелены на.Net 4.0, .Net 4.5 заменяет.Net 4.0 после установки.
Ваша машина с Windows 7 с VS2010, вероятно, не имеет.Net 4.5, и, следовательно, не подвержена этой ошибке.
Рабочий сервер Windows 8 (который обычно поставляется с.Net 4.5), возможно, был обновлен, и, следовательно, уже имеет это исправление
Таким образом, нерабочий сервер Windows 8, вероятно, еще не был обновлен с этим исправлением. (Запуск обычных обновлений Windows в конечном итоге также получит это обновление)
Вы можете сравнить установленные обновления на обоих серверах, чтобы убедиться, что среды совпадают.
Если вы собираетесь разрабатывать для машин, на которых установлен.Net 4.5, вы можете подумать о переходе на VS2012 или установке.Net 4.5 вручную для отражения изменений. Но будьте осторожны, если вы также нацелены на машины без.Net 4.5, есть и другие серьезные изменения...