Подтвердить что ты не робот

Ошибка: правила безопасности наследования, нарушенные по типу: "System.Web.WebPages.Razor.WebPageRazorHost"

Из ниоткуда мое решение ASP.NET MVC 4 выдает мне эту ошибку:

Правила безопасности наследования нарушены по типу: 'System.Web.WebPages.Razor.WebPageRazorHost'. Производные типы должны либо соответствовать доступности безопасности базового типа, либо быть менее доступными.

Я погуглил проблему, и все говорят, что это произошло, когда кто-то обновляет решение с одной версии на другую. Но я не обновлял свое решение, просто изменил IDE с VS12 на VS13. Это то, что создает проблему?

Полная трассировка стека выглядит следующим образом:

[TypeLoadException: правила безопасности наследования, нарушенные по типу: System.Web.WebPages.Razor.WebPageRazorHost '. Производные типы должны либо соответствовать доступности безопасности базового типа, либо быть менее доступными.] System.Web.WebPages.Razor.RazorBuildProvider.get_CodeCompilerType() +0 System.Web.Compilation.BuildProvider.GetCompilerTypeFromBuildProvider build [BuildProvider] BuildPiderider (Bund) System.Web.Compilation.BuildProvidersCompiler.ProcessBuildProviders() +209 System.Web.Compilation.BuildProvidersCompiler.PerformBuild() +30 System.Web.Compilation.BuildManager.CompileWebFile (виртуальный путь к виртуальной машине). BuildManager.GetVPathBuildResultInternal (виртуальный_путь виртуальный_путь, булева noBuild, булева allowCrossApp, булева allowBuildInPrecompile, булева throwIfNotFound, булева ensureIsUpToDate) +299 System.Web.Compilation.BuildManager.GetVPathBuildResultWithNoAssert(HttpContext контекст, виртуальный_путь виртуальный_путь, булева noBuild, булева allowCrossApp, булева allowBuildInPrecompile, Boolean throwIfNotFound, Boolean sureIsUpToDate) +103 System.Web.Compilation.Build Manager.GetVirtualPathObjectFactory(VirtualPath virtualPath, контекст HttpContext, логический allowCrossApp, логический throwIfNotFound) +165 System.Web.Compilation.BuildManager.GetObjectFactory (строковое virtualPath, Boolean throwIfWW.W.W.W.W.W.WF).WF. Mvc.IBuildManager.FileExists(String virtualPath) +40 System.Web.Mvc.BuildManagerViewEngine.FileExists(ControllerContext controllerContext, String virtualPath) +54 Microsoft.Web.Mvc.FixedRazorViewEngine.Microsoft.ViewEngine.Mile.Wile.Mile controllerContext, String virtualPath) +42 Microsoft.Web.Mvc.ViewEngineFixWorker 1.FileExists(ControllerContext controllerContext, String virtualPath) +57 Microsoft.Web.Mvc.<>c__DisplayClass4.<GetPathFromGeneralName>b__0(String path) +66 System.Web.WebPages.DefaultDisplayMode.GetDisplayInfo(HttpContextBase httpContext, String virtualPath, Func 2 virtualPathExists) +90 System.Web.WebPages. <> C__DisplayClassb.b__8 (IDisplay Режим Mode) +66 System.Linq.WhereSelectListIterator 2.MoveNext() +103 System.Linq.Enumerable.FirstOrDefault(IEnumerable источник 2.MoveNext() +103 System.Linq.Enumerable.FirstOrDefault(IEnumerable 1, 2 predicate) +94 System.Web.WebPages.DisplayModeProvider.GetDisplayInfoForVirtualPath(String virtualPath, HttpContextBase httpContext, Func Func 2 predicate) +94 System.Web.WebPages.DisplayModeProvider.GetDisplayInfoForVirtualPath(String virtualPath, HttpContextBase httpContext, Func 2 virtualPathExists, IDisplayMode currentDisplayMode, логическое значение requireConsistentDisplayMode) +297 System.Web.WebPages.DisplayModeProvider.GetDisplayInfoForVirtualPath (виртуальный путь-виртуальный 2 virtualPathExists, IDisplayMode currentDisplayMode) +108 Microsoft.Web.Mvc.ViewEngineFixWorker 1.GetPathFromGeneralName(ControllerContext controllerContext, список 1 locations, String name, String controllerName, String areaName, String cacheKey, String[]& searchedLocations) +653 Microsoft.Web.Mvc.ViewEngineFixWorker 1.GetPath(ControllerContext controllerContext), String [] areaLocations, String locationPropertyName, String name, String controllerName, String cach eKeyPrefix, булево значение useCache, String [] и поисковое местоположение) +1508 Microsoft.Web.Mvc.ViewEngineFixWorker 1.FindView(ControllerContext controllerContext, String viewName, String masterName, Boolean useCache) +329 Microsoft.Web.Mvc.FixedRazorViewEngine.FindView(ControllerContext controllerContext, String viewName, String masterName, Boolean useCache) +66 System.Web.Mvc.<>c__DisplayClassc.<FindView>b__b(IViewEngine e) +68 System.Web.Mvc.ViewEngineCollection.Find(Func 2, 1.FindView(ControllerContext controllerContext, String viewName, String masterName, Boolean useCache) +329 Microsoft.Web.Mvc.FixedRazorViewEngine.FindView(ControllerContext controllerContext, String viewName, String masterName, Boolean useCache) +66 System.Web.Mvc.<>c__DisplayClassc.<FindView>b__b(IViewEngine e) +68 System.Web.Mvc.ViewEngineCollection.Find(Func 2 Boolean trackSearchedPaths) +182 System.Web.Mvc.ViewEngineCollection.Find(Func 2 cacheLocator, Func 2 locator) +110 System.Web.Mvc.ViewEngineCollection.FindView(ControllerContext controllerContext, String viewName, String masterName] [имя_строки] [String master0ame]].Web.Mvc.ViewResult.FindView (контекст ControllerContext) +135 System.Web.Mvc.ViewResultBase.ExecuteResult (контекст ControllerContext) +230 System.Web.Mvc.ControllerActionInvoker.InvokeActionResult(ControllerContext Контроллер nResult) +39 System.Web.Mvc. <> c__DisplayClass1a.b__17() +74 System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter (фильтр IResultFilter, ResultExecutingContext, предварительный текст 1 continuation) +388 System.Web.Mvc.<>c__DisplayClass1c.<InvokeActionResultWithFilters>b__19() +72 System.Web.Mvc.ControllerActionInvoker.InvokeActionResultWithFilters(ControllerContext controllerContext, IList фильтры 1 continuation) +388 System.Web.Mvc.<>c__DisplayClass1c.<InvokeActionResultWithFilters>b__19() +72 System.Web.Mvc.ControllerActionInvoker.InvokeActionResultWithFilters(ControllerContext controllerContext, IList 1, действие ActionResult.() +155 System.Web.Mvc.Async. <> C__DisplayClass25.b__22 (IAsyncResult asyncResult) +184 System.Web.Mvc.Async.WrappedAsyncResult 1.End() +136 System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +56 System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeAction(IAsyncResult asyncResult) +40 System.Web.Mvc.<>c__DisplayClass1d.<BeginExecuteCore>b__18(IAsyncResult asyncResult) +40 System.Web.Mvc.Async.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar) +47 System.Web.Mvc.Async.WrappedAsyncResult 1.End() +136 System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +56 System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeAction(IAsyncResult asyncResult) +40 System.Web.Mvc.<>c__DisplayClass1d.<BeginExecuteCore>b__18(IAsyncResult asyncResult) +40 System.Web.Mvc.Async.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar) +47 System.Web.Mvc.Async.WrappedAsyncResult 1.End() +151 System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, тег объекта) +59 System.Web.Mvc. Async.AsyncResultWrapper.End(IAsyncResult asyncResult, тег объекта) +40 System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult) +44 System.Web.Mvc.Async. <> C__b0). ] System.Web.Mvc.Async.WrappedAsyncResult 1.End() +151 System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +59 System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +40 System.Web.Mvc.Controller.EndExecute(IAsyncResult asyncResult) +39 System.Web.Mvc.Controller.System.Web.Mvc.Async.IAsyncController.EndExecute(IAsyncResult asyncResult) +39 System.Web.Mvc.<>c__DisplayClass8.<BeginProcessRequest>b__3(IAsyncResult asyncResult) +45 System.Web.Mvc.Async.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar) +47 System.Web.Mvc.Async.WrappedAsyncResult 1.End() +151 System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +59 System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +40 System.Web.Mvc.Controller.EndExecute(IAsyncResult asyncResult) +39 System.Web.Mvc.Controller.System.Web.Mvc.Async.IAsyncController.EndExecute(IAsyncResult asyncResult) +39 System.Web.Mvc.<>c__DisplayClass8.<BeginProcessRequest>b__3(IAsyncResult asyncResult) +45 System.Web.Mvc.Async.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar) +47 System.Web.Mvc.Async.WrappedAsyncResult 1.End() +151 System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, тег объекта) +59 System.Web.Mvc.Async.AsyncResultWraE. IAsyncResult asyncResult, тег объекта) +40 System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) +40 System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHcessyn.esw.5858.Rews.Rews.Ru.Ru.W..CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +9651116 System.Web.HttpApplication.ExecuteStep (шаг IExecutionStep, логический и завершенный в синхронном режиме) +155

4b9b3361

Ответ 2

Перейдите в Web.config и найдите сборку name= "System.Web.Razor" и выполните следующие действия.

 <!--<dependentAssembly>
    <assemblyIdentity name="System.Web.Razor" publicKeyToken="31bf3856ad364e35" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-3.0.0.0" newVersion="3.0.0.0" />
  </dependentAssembly>-->

После комментариев сохранить и запустить проект, он будет работать нормально.

Ответ 3

Для меня комментирование "System.Web.Razor" из веб-конфигурации не сработало. Вот что я сделал, чтобы решить эту проблему. Найдите свое решение для ссылок на MvcWebRazorHostFactory. вы найдете что-то вроде ниже в файле конфигурации.

<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />

Измените Version = 4.0.0.0 на Version = 5.0.0.0, и он будет работать.

Ответ 4

Комментирование перенаправления привязки, как было предложено выше, работало на 3 из моих старых машин, но не работало на четвертой, более новой машине.

Оказывается, что комментирование перенаправления привязки, по-видимому, просто позволяет найти/использовать System.Web.Razor версии 1.0.0.0, но моей четвертой машине, недавно построенной, не хватало System.Web.Razor.DLL версии 1.0.0.0.

Скопировав DLL файл System.Web.Razor версии 1.0.0.0 на этот компьютер в папке bin веб-сайта, моя проблема была решена. После удаления DLL версии 1.0.0.0 и возврата версии 2.0.0.0 проблема вернулась.

Еще одно открытие, которое я сделал в отношении машин, на которых работал подход bindingRedirect, заключалось в том, что, как только RazorEngine сработал для меня после того, как я закомментировал перенаправление привязки, я мог откомментировать зариком перенаправления привязки, и RazorEngine продолжал работать.

Ответ 5

Ссылки на ваши проекты, в свою очередь, связаны с различными версиями библиотеки Microsoft.AspNet.Razor, которые несовместимы между собой.

Трассировка стека указывает на dll System.Web.WebPages, который, вероятно, ссылается на версию Microsoft.AspNet.Razor более раннюю, чем та, на которую ссылается другой пакет NuGet (например, Microsoft.AspNet.Mvc).

Решить проблему:

  1. Если вы непосредственно ссылаетесь на System.Web.WebPages, удалите ссылку и начните использовать пакет NuGet System.Web.WebPages
  2. Если вы уже используете пакет NuGet System.Web.WebPages, обновите его до той же версии пакета Microsoft.AspNet.Razor, которую вы уже используете в своем проекте.

Это исправит вашу текущую ошибку, но, вероятно, приведет к появлению новой, особенно если вы переносите или смешиваете пакеты между версиями Microsoft.AspNet.Mvc. В этом случае вам нужно синхронизировать версии всех ваших пакетов NuGet, связанных с MVC.