web-dev-qa-db-ja.com

エラー:継承セキュリティルールがタイプ '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(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、ブールensureIsUpToDate)+299 System.Web.Compilation.BuildManager.GetVPathBuildResultWithNoAssert(HttpContextコンテキスト、VirtualPath virtualPath、ブールnoBuild、ブールallowCrossApp、ブールallowBuildInPreCompile +103 System.Web.Compilation.BuildManager.GetVir tualPathObjectFactory(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, Func 2 virtualPathExists)+90 System.Web.WebPages。<> c__DisplayClassb.b__8(IDisplayModeモード)+66 System.Linq.WhereSelectListIterator2.MoveNext() +103 System.Linq.Enumerable.FirstOrDefault(IEnumerable 1 source、Func2 predicate) +94 System.Web.WebPages.DisplayModeProvider.GetDisplayInfoForVirtualPath(String virtualPath, HttpContextBase httpContext, Func 2 virtualPathExists、IDisplayMode currentDisplayMode、Boolean 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、List _1 locations, String name, String controllerName, String areaName, String cacheKey, String[]& searchedLocations) +653 Microsoft.Web.Mvc.ViewEngineFixWorker_ 1.GetPath(ControllerContext controllerContext、String [] locations、String [] areaLocations、String locationsPropertyName、String name、String controllerName、String cacheKeyPrefix、Boolean useCache、String []&searchLocations)+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(Func 2検索、ブール型trackSearchedPaths)+182 System.Web.Mvc.ViewEngineCollection.Find(Func _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 context)+230 System.Web .Mvc.ControllerActionInvoker.InvokeActionResult(ControllerContext controllerContext、ActionResult actionResult)+39 System.Web.Mvc。<> c__DisplayClass1a.b__17()+74 System.Web.Mvc.ControllerActionInvoker.InvokeAct ionResultFilter(IResultFilterフィルター、ResultExecutingContext preContext、Func1 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.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.WrappedAsyncResult 1.End()+151 System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult、Object tag)+59システム.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.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.MvcHandler.EndProcessRequest(IAsyncResult asyncResult)+40 System.Web.Mvc.MvcHandler.System.Web.IHttpAsync Handler.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

私の友人Claudio Rediのコメントから、この問題の孤独は次のとおりです。

Web.configのSystem.Web.Razorアセンブリバインディングが存在する場合は、削除してみてください。 http://forums.asp.net/t/1968686.aspx?Installed+Nuget+package+Razor+Engine+whole+system+stops

47
Cute Teddy

Web.configに移動し、Assembly 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>-->

コメントを保存してプロジェクトを実行すると、正常に動作します。

13
Debendra Dash

私にとって、web configからの "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に変更すると動作します。

1
Dileep

上記のようにバインディングリダイレクトをコメントアウトすると、3台の古いマシンで機能しましたが、4台目の新しいマシンでは機能しませんでした。

バインディングリダイレクトをコメントアウトすると、明らかにSystem.Web.Razorバージョン1.0.0.0が検出/使用されますが、新しく構築された4番目のマシンにはSystem.Web.Razor.DLLバージョン1.0.0.0がありませんでした。

System.Web.Razorバージョン1.0.0.0 DLLをWebサイトのbinフォルダにあるそのマシンにコピーすると、問題は解決しました。1.0.0.0バージョンの削除DLLバージョン2.0.0.0に戻すと、問題が返されました。

BindingRedirectアプローチが機能するマシンに関して私が見つけた別の発見は、バインディングリダイレクトをコメントアウトした後、RazorEngineが私のために働いた後、バインディングリダイレクトのコメントを外して、RazorEngineが引き続き動作することです。

0
sirhcsivad

プロジェクト参照は、異なるバージョンのMicrosoft.AspNet.Razorライブラリにリンクされ、それらは互換性がありません。

スタックトレースはSystem.Web.WebPages dllを指します。これはおそらく、他のNuGetパッケージで参照されているMicrosoft.AspNet.Razorよりも古いバージョン(たとえば、Microsoft.AspNet.Mvc)にリンクしています。

問題を修正するには:

  1. System.Web.WebPagesを直接参照している場合は、参照を削除し、System.Web.WebPages NuGetパッケージの使用を開始してください
  2. 既にSystem.Web.WebPages NuGetパッケージを使用している場合は、プロジェクトで既に使用しているMicrosoft.AspNet.Razorパッケージと同じバージョンに更新します。

これにより現在のエラーが修正されますが、特にMicrosoft.AspNet.Mvcバージョン間でパッケージを移行または混合している場合は、新しいエラーが表示される可能性があります。この場合、MVCに関連するすべてのNuGetパッケージのバージョンを同期する必要があります。

0
Gustavo Russo