簡體   English   中英

錯誤:類型違反了繼承安全規則:“ System.Web.WebPages.Razor.WebPageRazorHost”

[英]Error: Inheritance security rules violated by type: 'System.Web.WebPages.Razor.WebPageRazorHost'

我的ASP.NET MVC 4解決方案無處不給我這個錯誤:

類型違反了繼承安全規則:“ System.Web.WebPages.Razor.WebPageRazorHost”。 派生類型必須與基本類型的安全可訪問性匹配,或者不可訪問。

我用Google搜索了這個問題,每個人都說當有人將解決方案從一個版本更新到另一個版本時,就已經發生了。 但是我沒有更新解決方案,只是將IDE從VS12更改為VS13。 這是造成問題的原因嗎?

完整的堆棧跟蹤如下:

[TypeLoadException:類型違反了繼承安全規則:System.Web.WebPages.Razor.WebPageRazorHost”。 派生類型必須與基本類型的安全性可訪問性相匹配,或者必須較不易於訪問。] System.Web.WebPages.Razor.RazorBuildProvider.get_CodeCompilerType()+0 System.Web.Compilation.BuildProvider.GetCompilerTypeFromBuildProvider(BuildProvider buildProvider)+59系統。 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,布爾值noBuild,布爾值allowCrossApp,布爾值allowBuildInPrecompile,布爾值throwIfNotFound,布爾值sureIsUpToDate)+299 System.Web.Compilation.BuildManager.GetVPathBuildResultWithNoAssert(HttpContext上下文,VirtualPath虛擬路徑,布爾值NoBuild,布爾值allowCrossApp,布爾值allowBuildInPreCompile,NotifyUp, +103 System.Web.Compilation.BuildManager.GetVir tualPathObjectFactory(VirtualPath virtualPath,HttpContext上下文,布爾allowCrossApp,布爾throwIfNotFound)+165 System.Web.Compilation.BuildManager.GetObjectFactory(字符串virtualPath,布爾throwIfNotFound)+33 System.Web.Mvc.BuildManagerWrapper.System.Web.Mvc.IBuildManager。 FileExists(字符串virtualPath)+40 System.Web.Mvc.BuildManagerViewEngine.FileExists(ControllerContext controllerContext,字符串virtualPath)+54 Microsoft.Web.Mvc.FixedRazorViewEngine.Microsoft.Web.Mvc.IViewEngineProxy.FileExists(ControllerContext controllerContext,字符串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(IDisplayMode模式)+66 System.Linq.WhereSelectList 迭代器2.MoveNext() +103 System.Linq.Enumerable.FirstOrDefault(IEnumerable 1種源,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(String virtualPath,HttpContextBase httpContext,Func 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,字符串[]位置,字符串[] areaLocations,字符串locationPropertyName,字符串名稱,字符串controllerName,字符串cacheKeyPrefix,布爾useCache,字符串[]&searchedLocations)+1 508 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查找,布爾型trackSearchedPaths)+182 System.Web.Mvc.ViewEngineCollection.Find(功能2 cacheLocator, Func 2定位器)+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上下文)+230 System.Web.Mvc.ControllerActionInvoker.InvokeActionResult(ControllerContext controllerContext,ActionResult actionResult)+39 System.Web.Mvc。<> c__DisplayClass1a.b__17()+74 System.Web.Mvc.ControllerActi onInvoker.InvokeActionResultFilter(IResultFilter過濾器,ResultExecutingContext preContext,Func 1 continuation) +388 System.Web.Mvc.<>c__DisplayClass1c.<InvokeActionResultWithFilters>b__19() +72 System.Web.Mvc.ControllerActionInvoker.InvokeActionResultWithFilters(ControllerContext controllerContext, IList 1 ,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。 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__DisplayClass4.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,Object標記)+59 System.Web.Mvc.Async.AsyncResultWrapp er.End(IAsyncResult asyncResult,對象標記)+40 System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult)+40 System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult結果)+38系統。 Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()+9651116 System.Web.HttpApplication.ExecuteStep(IExecutionStep步驟,布爾值且已完成)+155

從我的朋友克勞迪奧·雷迪(Claudio Redi)的評論來看,這個問題的解決方案是:

嘗試刪除web.config中的System.Web.Razor程序集綁定(如果存在)。 http://forums.asp.net/t/1968686.aspx?Installed+Nuget+package+Razor+Engine+whole+system+stops

轉到Web.config並搜索程序集名稱=“ 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>-->

評論后保存並運行項目,它將正常工作。

對我來說,從Web配置中對“ 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,它將起作用。

如上所述,注釋掉綁定重定向對我的3台舊計算機有效,但在第四台較新的計算機上無效。

原來,注釋掉綁定重定向顯然只允許找到/使用System.Web.Razor 1.0.0.0版,但是我的第四台機器(新建機器)缺少System.Web.Razor.DLL 1.0.0.0版。

將System.Web.Razor版本1.0.0.0 DLL復制到網站的bin文件夾中的那台計算機,然后解決了我的問題。 刪除1.0.0.0版本的DLL並將版本2.0.0.0放回原位,問題就回來了。

我對bindRedirect方法確實起作用的機器的另一個發現是,一旦RazorEngine在注釋掉綁定重定向后為我工作了,我就可以取消注釋該綁定重定向,而RazorEngine可以繼續工作。

您的項目引用又鏈接到Microsoft.AspNet.Razor庫的不同版本,它們之間是不兼容的。

您的堆棧跟蹤指向System.Web.WebPages dll,該DLL可能鏈接到比其他NuGet包(例如Microsoft.AspNet.Mvc )所引用的Microsoft.AspNet.Razor更舊的版本。

解決問題:

  1. 如果您直接引用System.Web.WebPages ,請刪除引用並開始使用System.Web.WebPages NuGet包
  2. 如果您已經在使用System.Web.WebPages NuGet程序包,請將其更新為項目中已經使用的Microsoft.AspNet.Razor程序包的相同版本。

這將解決您當前的錯誤,但可能會導致出現一個新錯誤,尤其是在Microsoft.AspNet.Mvc版本之間遷移或混合軟件包時。 在這種情況下,您需要同步與MVC相關的所有NuGet軟件包的版本。

在使用WCF組件的Windows服務中,我遇到了此錯誤“類型違反了繼承安全性規則”。

相同的服務可以在其他服務器上使用,但是在特定的服務器上則不能。

解決此錯誤的原因是在app.config文件中注釋了以下行。

<NetFx40_LegacySecurityPolicy enabled="true" />

我們花了很多時間來解決這個問題,希望對您有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM