Ответ 1
Попробуйте добавить в свой web.config следующее:
<appSettings>
<add key="webpages:Version" value="1.0.0.0"/>
</appSettings>
Проблема может быть связана с тем, что несколько зарегистрированных поставщиков сборки и последний выигрыш.
Я получаю следующее исключение после установки ASP.NET MVC 4 Beta на машине с ASP.NET MVC 3.
Исправление System.InvalidCastException не было обработано кодом пользователя Сообщение = [A] System.Web.WebPages.Razor.Configuration.HostSection не может быть добавлено к [B] System.Web.WebPages.Razor.Configuration.HostSection. Тип А возникает от "System.Web.WebPages.Razor, Version = 1.0.0.0, Culture = нейтральный, PublicKeyToken = 31bf3856ad364e35 'в контексте" По умолчанию "в месте " C:\Windows\Microsoft.Net\сборка\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 = neutral, PublicKeyToken = 31bf3856ad364e35" в контексте "По умолчанию" в месте "C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Web.WebPages.Razor\v4.0_2.0.0.03131bf3856ad364e35\System.Web.WebPages.Razor.dll '. Источник = System.Web.WebPages.Razor
StackTrace:
в System.Web.WebPages.Razor.WebRazorHostFactory.GetRazorSection(String virtualPath) в System.Web.WebPages.Razor.WebRazorHostFactory.CreateHostFromConfig(String virtualPath, String physicalPath) в System.Web.WebPages.Razor.RazorBuildProvider.GetHostFromConfig() в System.Web.WebPages.Razor.RazorBuildProvider.CreateHost() в System.Web.WebPages.Razor.RazorBuildProvider.EnsureGeneratedCode() в System.Web.WebPages.Razor.RazorBuildProvider.get_CodeCompilerType() в System.Web.Compilation.BuildProvider.GetCompilerTypeFromBuildProvider(BuildProvider buildProvider) в System.Web.Compilation.BuildProvidersCompiler.ProcessBuildProviders() в System.Web.Compilation.BuildProvidersCompiler.PerformBuild() в System.Web.Compilation.BuildManager.CompileWebFile(VirtualPath virtualPath) в System.Web.Compilation.BuildManager.GetVPathBuildResultInternal(VirtualPath virtualPath, Boolean noBuild, Boolean allowCrossApp, Boolean allowBuildInPrecompile, Boolean throwIfNotFound, Boolean обеспечиваетIsUpToDate) в System.Web.Compilation.BuildManager.GetVPathBuildResultWithNoAssert(контекст HttpContext, VirtualPath virtualPath, Boolean noBuild, Boolean allowCrossApp, Boolean allowBuildInPrecompile, Boolean throwIfNotFound, Boolean обеспечиваютIsUpToDate) в System.Web.Compilation.BuildManager.GetVirtualPathObjectFactory(VirtualPath virtualPath, контекст HttpContext, Boolean allowCrossApp, Boolean throwIfNotFound) в System.Web.Mvc.BuildManagerWrapper.System.Web.Mvc.IBuildManager.FileExists(String virtualPath) в System.Web.Mvc.BuildManagerViewEngine.FileExists(ControllerContext controllerContext, String virtualPath) в System.Web.Mvc.VirtualPathProviderViewEngine.GetPathFromGeneralName(ControllerContext controllerContext, List`1 location, String name, String controllerName, String areaName, String cacheKey, String [] & lookLocations) в System.Web.Mvc.VirtualPathProviderViewEngine.GetPath(ControllerContext controllerContext, String [] location, String [] areaLocations, String locationsPropertyName, String name, String controllerName, String cacheKeyPrefix, Boolean useCache, String [] & lookLocations) в System.Web.Mvc.VirtualPathProviderViewEngine.FindView(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 lookup, 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.Mvc.ControllerActionInvoker. < > c__DisplayClass1c.b__19() в System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(фильтр IResultFilter, ResultExecutingContext preContext, продолжение Func`1) в System.Web.Mvc.ControllerActionInvoker. < > c__DisplayClass1c. < > c__DisplayClass1e.b__1b() в System.Web.Mvc.ControllerActionInvoker.InvokeActionResultWithFilters(ControllerContext controllerContext, IList`1, ActionResult actionResult) в System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName) в System.Web.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__DisplayClass1.b__0() в System.Web.Mvc.Async.AsyncResultWrapper. < > c__DisplayClass8`1.b__7 (IAsyncResult _) в System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.End() в System.Web.Mvc.MvcHandler. < > c__DisplayClasse.b__d() в System.Web.Mvc.SecurityUtil.b__0 (Действие f) в System.Web.Mvc.SecurityUtil.ProcessInApplicationTrust(действие действия) в System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) в System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(результат IAsyncResult) в System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.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>
Также в примечаниях не упоминается изменить ссылку System.Web.Helpers с 1.0.0.0 на 2.0.0.0 (удалить и добавить новую).
Еще одно, довольно позднее решение... Я столкнулся с этой проблемой. Все исправления, перечисленные здесь (Спасибо всем!), Но не смогли пройти мимо ошибки. Наконец, в отчаянии я нашел файл web.config в каталоге представлений. В этом файле я нашел несколько ссылок на версию 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>
Стив G.
Я нашел другой способ заставить это работать по линии тайваньского блога при обновлении с 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+ вы можете загружать изображение с металла и не принимать перфоманс, если вам это нужно (с помощью dev tool betas, вы часто делаете).
Для полноты...
Вы также можете полностью отключить веб-страницы, если вы их не используете.
<appSettings>
<add key="webpages:Enabled" value="false" />
</appSettings>
(Я все еще не совсем понимаю связь между видами бритвы и веб-страницами, но, похоже, мое приложение MVC с просмотром бритвы по-прежнему работает с отключенными веб-страницами.)
Также в качестве последнего шага очистите папку bin из проекта, из которого исходит ошибка.