Я получаю следующее исключение после установки бета-версии ASP.NET MVC 4 на машине с ASP.NET MVC 3.
Исключение System.InvalidCastException не было обработано пользовательским кодом Message = [A] System.Web.WebPages.Razor.Configuration.HostSection не может быть преобразован в [B] System.Web.WebPages.Razor.Configuration.HostSection. Тип A происходит из System.Web.WebPages.Razor, Version = 1.0.0.0, Culture = нейтральный, PublicKeyToken = 31bf3856ad364e35 в контексте Default в расположении C: \ Windows \ Microsoft.Net \ assembly \ GAC_MSIL \ System .Web.WebPages.Razor \ v4.0_1.0.0.0__31bf3856ad364e35 \ System.Web.WebPages.Razor.dll '. Тип B происходит из 'System.Web.WebPages.Razor, Version = 2.0.0.0, Culture = нейтральный, PublicKeyToken = 31bf3856ad364e35' в контексте 'Default' в расположении 'C: \ Windows \ Microsoft.Net \ assembly \ GAC_MSIL \ System .Web.WebPages.Razor \ v4.0_2.0.0. 0__31bf3856ad364e35 \ System.Web.WebPages.Razor.dll '. Источник = System.Web.WebPages.Razor
Трассировки стека:
в System.Web.WebPages.Razor.WebRazorHostFactory.GetRazorSection (String virtualPath) в System.Web.WebPages.Razor.WebRazorHostFactory.CreateHostFromConfig (String virtualPath, String physicalPath) at System.WebRazorHostFactory. System.Web.WebPages.Razor.RazorBuildProvider.CreateHost () в System.Web.WebPages.Razor.RazorBuildProvider.EnsureGeneratedCode () в System.Web.WebPages.Razor.RazorBuildProvider.get_CodeCompiler (System.Web.WebPages.Razor.RazorBuildProvider.get_Code) GetCompilerTypeFromBuildProvider (BuildProvider buildProvider) в System.Web.Compilation.BuildProvidersCompiler.ProcessBuildProviders () в System.Web.Compilation.BuildProvidersCompiler.PerformBuild () в System.Web.Compilation.BuildManager.CompileWebFile (виртуальный_путь виртуальный_путь) при System.Web.Compilation.BuildManager.GetVPathBuildResultInternal (виртуальный_путь виртуальный_путь, булевой noBuild, булевой allowCrossApp, Boolean, Boolean allowBuildInPrecompile throwIfNotFound, Boolean ensureIsUpToDate) при System.Web.Compilation.BuildManager.GetVPathBuildResultWithNoAssert (HttpContext контексте, виртуальный_путь виртуальный_путь , Boolean noBuild, Boolean allowCrossApp, Boolean allowBuildInPrecompile, Boolean throwIfNotFound, Boolean sureIsUpToDate) в System.Web.Compilation.BuildManager.GetVirtualPathObjectFactory (Boolean, VirtualPathManager.GetVirtualPathObjectFactory. Web.Mvc.IBuildManager.FileExists (String virtualPath) в System.Web.Mvc.BuildManagerViewEngine.FileExists (ControllerContext controllerContext, String virtualPath) в System.Web.Mvc.VirtualPathProviderViewEngine.GetPathFromGeneralName (ControllerContext controllerContext, местоположения List`1, имя строки, String controllerName, String areaName, String cacheKey, String [] и searchledLocations) в System.Web. Mvc.VirtualPathProviderViewEngine.GetPath (ControllerContext controllerContext, String [] location, String [] areaLocations, String locationPropertyName, String name, String controllerName, String cacheKeyPrefix, Boolean useCache, String [] и searchledLocations) в System.Web.Mvc.VirtualEngView (ControllerContext controllerContext, String viewName, String masterName, Boolean useCache) в System.Web.Mvc.ViewEngineCollection. <> C__DisplayClassc.b__b (IViewEngine e) в System.Web.Mvc.ViewEngineCollection.Find (поиск Func`2, Boolean trackSearchedPaths) в System.Web.Mvc.ViewEngineCollection.FindView (ControllerContext controllerContext, String viewName, String masterName) в System.Web.Mvc .ViewResult.FindView (контекст ControllerContext) в System.Web.Mvc.ViewResultBase.ExecuteResult (контекст ControllerContext) в System.Web.Mvc.ControllerActionInvoker.InvokeActionResult (ControllerContext controllerContext, ActionResult actionResult) в System.Web.Controler. c__DisplayClass1c.b__19 () в System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter (фильтр IResultFilter, преконтекст ResultExecutingContext, продолжение Func`1) в System.Web.Mvc.ControllerActionInvokerplay <> c__Dis> c__DisplayClass1e.b__1b () в System.Web.Mvc.ControllerActionInvoker.InvokeActionResultWithFilters (ControllerContext controllerContext, фильтры IList`1, ActionResult actionResult) в System.Web.Mvc.ControllerActionInvoker.InvokeName контроллер. Mvc.Controller.ExecuteCore () в [project_namespace] .Controllers.GlobalizationController.ExecuteCore () в [file_path] в System.Web.Mvc.ControllerBase.Execute (RequestContext requestContext) в System.Web.Mvc.ControllerBase.System.Web. Mvc.IController.Execute (RequestContext requestContext) в System.Web.Mvc.MvcHandler. <> C__DisplayClass6. <> C__DisplayClassb.b__5 () в System.Web.Mvc.Async.AsyncResultWrapper. <> C__Display0Class1. Web.Mvc.Async.AsyncResultWrapper. <> C__DisplayClass8`1.b__7 (IAsyncResult _) в System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.End () в System.Web.Mv__MvcHandlerplay () в System.Web. System.Web.Mvc.SecurityUtil.b__0 (действие f) в System.Web.Mvc.SecurityUtil.ProcessInApplicationTrust (действие действия) в System.Web.Mvc.MvcHandler.EndProcessRequest (IAsyncResult asyncResult) в System.Web.Mv.Mvc. System.Web.IHttpAsyncHandler.EndProcessRequest (результат IAsyncResult) в System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute () в System.WebecutionStep.Execute () в System.Web.ExecutionStep.Execute () в System.WebecutionStepouslyWeb.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.End () в System.Web.Mvc.MvcHandler. <> C__DisplayClasse.b__d () в System.Web.Mvc.SecurityUtil.b__0 (Action f) в System.Web. Mvc.SecurityUtil.ProcessInApplicationTrust (действие действия) в System.Web.Mvc.MvcHandler.EndProcessRequest (IAsyncResult asyncResult) в System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.System.Web.IHttpAsyncHandler.EndProcess (IHttpAsyncHandler.EndProcess). CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute () в System.Web.HttpApplication.ExecuteStep (шаг IExecutionStep, логическое значение и завершено синхронно)Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.End () в System.Web.Mvc.MvcHandler. <> C__DisplayClasse.b__d () в System.Web.Mvc.SecurityUtil.b__0 (Action f) в System.Web. Mvc.SecurityUtil.ProcessInApplicationTrust (действие действия) в System.Web.Mvc.MvcHandler.EndProcessRequest (IAsyncResult asyncResult) в System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.System.Web.IHttpAsyncHandler.EndProcess (IHttpAsyncHandler.EndProcess). CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute () в System.Web.HttpApplication.ExecuteStep (шаг IExecutionStep, логическое значение и завершено синхронно)b__0 (Действие f) в System.Web.Mvc.SecurityUtil.ProcessInApplicationTrust (Действие) в System.Web.Mvc.MvcHandler.EndProcessRequest (IAsyncResult asyncResult) в System.Web.Mvc.MvcHandler.System.Web.IH IAsyncResult) в System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute () в System.Web.HttpApplication.ExecuteStep (шаг IExecutionStep завершен, Boolean)b__0 (Действие f) в System.Web.Mvc.SecurityUtil.ProcessInApplicationTrust (Действие) в System.Web.Mvc.MvcHandler.EndProcessRequest (IAsyncResult asyncResult) в System.Web.Mvc.MvcHandler.System.Web.IH IAsyncResult) в System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute () в System.Web.HttpApplication.ExecuteStep (шаг IExecutionStep завершен, Boolean)HttpApplication.IExecutionStep.Execute () в System.Web.HttpApplication.ExecuteStep (шаг IExecutionStep, логическое значение и завершено синхронно)HttpApplication.IExecutionStep.Execute () в System.Web.HttpApplication.ExecuteStep (шаг IExecutionStep, логическое значение и завершено синхронно)
Это полностью блокирует меня, и хотя я хотел бы сохранить бета-версию, мне может потребоваться полностью удалить ее, чтобы избавиться от исключения.
источник
Ответы:
Попробуйте добавить в свой web.config следующее:
<appSettings> <add key="webpages:Version" value="1.0.0.0"/> </appSettings>
Проблема может быть связана с регистрацией нескольких поставщиков сборки и последним выигрышем.
источник
У меня была такая же проблема, но при переносе ASP.NET MVC 3 на ASP.NET MVC 4. Таким образом я попал в эту тему. Я нашел решение проблемы, но его источник другой, не от
WebPages
версии.Я следовал официальному руководству (так сказать) по обновлению проекта ASP.NET MVC 3 до ASP.NET MVC 4 .
Чтобы решить эту проблему, вам нужно добавить в Web.Config (возможно, около ранее добавленных):
<runtime><!-- Should be there by default, near end --> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"><!-- Should be there by default --> <dependentAssembly>..</dependentAssembly><!-- Should be there by default --> ... some other dependecy redirects ... <dependentAssembly> <assemblyIdentity name="System.Web.WebPages.Razor" publicKeyToken="31bf3856ad364e35" /> <bindingRedirect oldVersion="1.0.0.0" newVersion="2.0.0.0"/> </dependentAssembly> ... some other dependency redirects ... </assemblyBinding> </runtime>
Также в примечаниях не упоминается об изменении Reference of System.Web.Helpers с 1.0.0.0 на 2.0.0.0 (удалите и добавьте новый).
источник
oldVersion="1.0.0.0-2.0.0.0"
чтобы следовать соглашению, используемому в шаблоне проекта MVC4. Интересно, чтоdependentAssembly
forSystem.Web.WebPages.Razor
также отсутствует в корневом файле Web.config в шаблоне проекта MVC4.oldVersion="2.0.0.0" newVersion="3.0.0.0"
Еще одно, довольно позднее решение ... Я столкнулся с той же проблемой. Сделал все исправления, перечисленные здесь (спасибо всем !!!), но не смог обойти ошибку. Наконец, в отчаянии я нашел файл web.config в каталоге Views. В этом файле я нашел несколько ссылок на версию System.Web.Mvc и увеличил их до "4.0.0.0". Что еще более важно, я нашел следующие строки и обновил номера версий для «system.web.webPages.Razor» с «1.0.0.0» на «2.0.0.0», и внезапно все снова заработало. Надеюсь, это поможет кому-то другому.
<sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"> <section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" /> <section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" /> </sectionGroup>
Стив Г.
источник
Я нашел другой способ заставить это работать, по пути к тайваньскому блогу об обновлении с MVC 2 до MVC 3: http://blog.kkbruce.net/2011_04_01_archive.html (вы можете использовать Microsoft Translate в IE10, чтобы увидеть английская версия, и это довольно хороший перевод ...)
Хитрость заключается в том, чтобы найти все версии, которые относятся к MVC3 (например, сборки Razor, Mvc, Helper, вы узнаете, что они собой представляют, если перейдете к своим ссылкам и проверите все более новые версии вашей сборки, на которую ссылаетесь) и измените их с 1.0.0.0 до 2.0.0.0 и от 3.0.0.0 до 4.0.0.0 (поскольку открытые ключи одинаковы). Вы также можете попробовать удалить версии, указанные в блоге.
Еще важно то, что эти настройки есть во всех Web.Configs. Так что не только под root-доступом, но и под View, Area / {Area} / View и т. Д.
Я чувствую, что это решение может позволить вам полностью перейти на MVC4 вместо гибрида, который в любом случае не сработал для меня.
источник
Вы заметите:
System.Web.WebPages.Razor
меняется сVersion=1.0.0.0
наVersion=2.0.0.0
System.Web.Mvc
меняется сVersion=3.0.0.0
наVersion=4.0.0.0
источник
Если у вас возникла эта проблема, и вы попробовали описанные выше решения, но это не сработало, проверьте файл web.config в папке «Просмотры». Могут быть некоторые конфигурации, которые конфликтуют с файлом Web.config в корневой папке вашего приложения.
источник
Некоторые из ваших кодов работают с текущими битами MVC, тогда как другие были перенесены на более новые. Не понимая кода, я не могу сказать, какой именно бит вызывает проблему.
Сказав это, я бы никогда не стал устанавливать бета-версию на производственной машине для разработки. В наши дни слишком просто создать виртуальную машину и запустить бета-версию образа. В Windows 7+ вы можете загружать образ с металла и не получать перфоманс, если вам это нужно (с бета-версиями инструмента разработки вы часто этого не делаете).
источник
Для полноты картины ...
Вы также можете просто отключить веб-страницы, если вы их не используете.
<appSettings> <add key="webpages:Enabled" value="false" /> </appSettings>
(Я до сих пор не совсем понимаю связь между представлениями бритвы и веб-страницами, но, похоже, мое приложение MVC с видами бритвы все еще работает с отключенными веб-страницами.)
источник
Также в качестве последнего шага очистите папку bin от проекта, в котором возникла ошибка.
источник