web-dev-qa-db-fra.com

Erreur: violation des règles de sécurité d'héritage par le type: 'System.Web.WebPages.Razor.WebPageRazorHost'

De nulle part ma solution asp.net mvc 4 me donne cette erreur:

Règles de sécurité d'héritage violées par le type: 'System.Web.WebPages.Razor.WebPageRazorHost'. Les types dérivés doivent correspondre à l'accessibilité de la sécurité du type de base ou être moins accessibles.J'ai cherché le problème sur Google et tout le monde a dit que c'était ce qui se produisait quand quelqu'un mettait à jour cette solution d'une version à une autre. Mais je n'ai pas mis à jour ma solution, il suffit de changer le IDE de VS12 à VS13. Est-ce ce qui crée le problème?.

La trace de pile complète est la suivante:

[TypeLoadException: Inheritance security rules violated by type: System.Web.WebPages.Razor.WebPageRazorHost'. Derived types must either match the security accessibility of the base type or be less accessible.] System.Web.WebPages.Razor.RazorBuildProvider.get_CodeCompilerType() +0 System.Web.Compilation.BuildProvider.GetCompilerTypeFromBuildProvider(BuildProvider buildProvider) +59 System.Web.Compilation.BuildProvidersCompiler.ProcessBuildProviders() +209 System.Web.Compilation.BuildProvidersCompiler.PerformBuild() +30 System.Web.Compilation.BuildManager.CompileWebFile(VirtualPath virtualPath) +9971917 System.Web.Compilation.BuildManager.GetVPathBuildResultInternal(VirtualPath virtualPath, Boolean noBuild, Boolean allowCrossApp, Boolean allowBuildInPrecompile, Boolean throwIfNotFound, Boolean ensureIsUpToDate) +299 System.Web.Compilation.BuildManager.GetVPathBuildResultWithNoAssert(HttpContext context, VirtualPath virtualPath, Boolean noBuild, Boolean allowCrossApp, Boolean allowBuildInPrecompile, Boolean throwIfNotFound, Boolean ensureIsUpToDate) +103 System.Web.Compilation.BuildManager.GetVirtualPathObjectFactory(VirtualPath virtualPath, HttpContext context, Boolean allowCrossApp, Boolean throwIfNotFound) +165 System.Web.Compilation.BuildManager.GetObjectFactory(String virtualPath, Boolean throwIfNotFound) +33 System.Web.Mvc.BuildManagerWrapper.System.Web.Mvc.IBuildManager.FileExists(String virtualPath) +40 System.Web.Mvc.BuildManagerViewEngine.FileExists(ControllerContext controllerContext, String virtualPath) +54 Microsoft.Web.Mvc.FixedRazorViewEngine.Microsoft.Web.Mvc.IViewEngineProxy.FileExists(ControllerContext controllerContext, String virtualPath) +42 Microsoft.Web.Mvc.ViewEngineFixWorker1.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, Func2 virtualPathExists) +90 System.Web.WebPages.<>c__DisplayClassb.b__8(IDisplayMode mode) +66 System.Linq.WhereSelectListIterator2.MoveNext() +103 System.Linq.Enumerable.FirstOrDefault(IEnumerable1 source, Func2 predicate) +94 System.Web.WebPages.DisplayModeProvider.GetDisplayInfoForVirtualPath(String virtualPath, HttpContextBase httpContext, Func2 virtualPathExists, IDisplayMode currentDisplayMode, Boolean requireConsistentDisplayMode) +297 System.Web.WebPages.DisplayModeProvider.GetDisplayInfoForVirtualPath(String virtualPath, HttpContextBase httpContext, Func2 virtualPathExists, IDisplayMode currentDisplayMode) +108 Microsoft.Web.Mvc.ViewEngineFixWorker1.GetPathFromGeneralName(ControllerContext controllerContext, List1 locations, String name, String controllerName, String areaName, String cacheKey, String[]& searchedLocations) +653 Microsoft.Web.Mvc.ViewEngineFixWorker1.GetPath(ControllerContext controllerContext, String[] locations, String[] areaLocations, String locationsPropertyName, String name, String controllerName, String cacheKeyPrefix, Boolean useCache, String[]& searchedLocations) +1508 Microsoft.Web.Mvc.ViewEngineFixWorker1.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(Func2 lookup, Boolean trackSearchedPaths) +182 System.Web.Mvc.ViewEngineCollection.Find(Func2 cacheLocator, Func2 locator) +110 System.Web.Mvc.ViewEngineCollection.FindView(ControllerContext controllerContext, String viewName, String masterName) +329 System.Web.Mvc.ViewResult.FindView(ControllerContext context) +135 System.Web.Mvc.ViewResultBase.ExecuteResult(ControllerContext context) +230 System.Web.Mvc.ControllerActionInvoker.InvokeActionResult(ControllerContext controllerContext, ActionResult actionResult) +39 System.Web.Mvc.<>c__DisplayClass1a.b__17() +74 System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(IResultFilter filter, ResultExecutingContext preContext, Func1 continuation) +388 System.Web.Mvc.<>c__DisplayClass1c.<InvokeActionResultWithFilters>b__19() +72 System.Web.Mvc.ControllerActionInvoker.InvokeActionResultWithFilters(ControllerContext controllerContext, IList1 filters, ActionResult actionResult) +303 System.Web.Mvc.Async.<>c__DisplayClass2a.b__20() +155 System.Web.Mvc.Async.<>c__DisplayClass25.b__22(IAsyncResult asyncResult) +184 System.Web.Mvc.Async.WrappedAsyncResult1.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.WrappedAsyncResult1.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.EndExecuteCore(IAsyncResult asyncResult) +44 System.Web.Mvc.Async.<>c__DisplayClass4.b__3(IAsyncResult ar) +47 System.Web.Mvc.Async.WrappedAsyncResult1.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.WrappedAsyncResult1.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.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) +40 System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult result) +38 System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +9651116 System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +155

33
Cute Teddy

D'après le commentaire de mon ami Claudio Redi, la solution de ce problème est la suivante:

Essayez de supprimer la liaison System.Web.Razor Assembly dans le fichier web.config, le cas échéant. http://forums.asp.net/t/1968686.aspx?Installed+Nuget+package+Razor+Engine+whole+system+stops

46
Cute Teddy

Accédez à Web.config et recherchez le nom d'assembly = "System.Web.Razor" et commentez comme suit.

 <!--<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>-->

Après avoir enregistré et exécuté le projet, cela fonctionnera correctement.

12
Debendra Dash

Pour moi, commenter "System.Web.Razor" de la configuration Web n'a pas fonctionné. Voici ce que j'ai fait pour résoudre ce problème. Recherchez dans toute votre solution les références à MvcWebRazorHostFactory. vous trouverez quelque chose comme ci-dessous dans le fichier de configuration.

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

Changez Version = 4.0.0.0 en Version = 5.0.0.0 et cela fonctionnera.

1
Dileep

Commenter la redirection de liaison comme suggéré ci-dessus a fonctionné pour 3 de mes anciennes machines mais ne fonctionne pas sur une quatrième machine plus récente. 

Il s'avère que commenter la redirection de liaison ne permet apparemment que de trouver/utiliser System.Web.Razor version 1.0.0.0, mais ma 4ème machine, une machine nouvellement construite, ne possédait pas la version 1.0.0.0 de System.Web.Razor.DLL. 

Copier System.Web.Razor version 1.0.0.0 DLL sur cette machine dans le dossier bin du site Web, mon problème a été résolu. En supprimant la version 1.0.0.0 DLL et en rétablissant la version 2.0.0.0, le problème est renvoyé. 

Une autre découverte concernant les machines où l’approche bindingRedirect a fonctionné est qu’une fois que RazorEngine a fonctionné pour moi après avoir commenté la redirection de liaison, je pouvais annuler la mise en commentaire de la redirection de liaison et RazorEngine continuait de fonctionner.

0
sirhcsivad

Les références de votre projet sont à leur tour liées à différentes versions de la bibliothèque Microsoft.AspNet.Razor incompatibles entre elles.

Votre trace de pile pointe vers la DLL System.Web.WebPages, qui est probablement liée à une version de Microsoft.AspNet.Razor antérieure à celle référencée par un autre package NuGet (par exemple Microsoft.AspNet.Mvc).

Pour résoudre le problème:

  1. Si vous faites directement référence à System.Web.WebPages, supprimez la référence et commencez à utiliser le package System.Web.WebPages NuGet.
  2. Si vous utilisez déjà le package NuGet System.Web.WebPWeb, mettez-le à jour avec la même version du package Microsoft.AspNet.Razor que vous utilisez déjà dans votre projet.

Cela corrigera votre erreur actuelle, mais en affichera probablement une nouvelle, en particulier si vous migrez des packages de mélange entre des versions de Microsoft.AspNet.Mvc. Dans ce cas, vous devez synchroniser les versions de tous vos packages NuGet liés à MVC.

0
Gustavo Russo