Ошибка: правила безопасности наследования, нарушенные по типу: "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
Ответы
Ответ 1
От моего друга Клаудио Реди прокомментировал, что решение этой проблемы:
Попробуйте удалить привязку сборки System.Web.Razor в web.config, если она есть. http://forums.asp.net/t/1968686.aspx?Installed+Nuget+package+Razor+Engine+whole+system+stops
Ответ 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
).
Решить проблему:
- Если вы непосредственно ссылаетесь на
System.Web.WebPages
, удалите ссылку и начните использовать пакет NuGet System.Web.WebPages
- Если вы уже используете пакет NuGet
System.Web.WebPages
, обновите его до той же версии пакета Microsoft.AspNet.Razor
, которую вы уже используете в своем проекте.
Это исправит вашу текущую ошибку, но, вероятно, приведет к появлению новой, особенно если вы переносите или смешиваете пакеты между версиями Microsoft.AspNet.Mvc
. В этом случае вам нужно синхронизировать версии всех ваших пакетов NuGet, связанных с MVC.