【发布时间】:2015-12-22 14:49:48
【问题描述】:
我有一个在 ASP.NET 4.6 上运行的简单 MVC 5 Web 应用程序。该网站在 IIS 中本地配置时有效,但是当发布版本发布并上传到共享托管环境时,我收到错误“覆盖成员时违反继承安全规则”
“/”应用程序中的服务器错误。
覆盖成员时违反了继承安全规则:“SimpleInjector.Integration.Web.Mvc.SimpleInjectorDependencyResolver.GetService(System.Type)”。重写方法的安全可访问性必须与被重写方法的安全可访问性相匹配。
说明:在执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。
异常详细信息:System.TypeLoadException:覆盖成员时违反了继承安全规则:“SimpleInjector.Integration.Web.Mvc.SimpleInjectorDependencyResolver.GetService(System.Type)”。重写方法的安全可访问性必须与被重写方法的安全可访问性相匹配。
来源错误:
在执行当前 Web 请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪来识别有关异常起源和位置的信息。
堆栈跟踪:
[TypeLoadException:覆盖成员时违反了继承安全规则:'SimpleInjector.Integration.Web.Mvc.SimpleInjectorDependencyResolver.GetService(System.Type)'。重写方法的安全可访问性必须与被重写方法的安全可访问性相匹配。]
我的理解是,MVC Web 应用程序需要在完全信任的情况下运行,但托管服务提供商表示这是不可能的,并且他们在机器级别设置了一个规则,将应用程序限制为中等信任。
在代码级别是否有解决方法,我不敢相信要运行一个简单的 Web 应用程序,您需要一个可以配置为具有完全访问权限的专用 Web 服务器框。
是否有另一个 IoC 容器可以使用且不会导致此安全冲突?
【问题讨论】:
-
从 .NET 4.0 开始,Microsoft has deprecated support for partial trust 在 ASP.NET 中。因此,即使您让 Simple Injector 运行,您也可能很快就会遇到麻烦,因为 Microsoft 不会修复任何部分信任问题,并且新开发的逻辑不会经过测试以在部分信任下运行。正如您在该链接中看到的那样,您的托管服务提供商不应以部分信任的方式运行。
-
换句话说,如果您的共享主机提供商不提供完全信任,那么是时候寻找新的共享主机提供商了(或者可能使用可以控制这些设置的虚拟专用服务器自己)。
标签: asp.net-mvc shared-hosting simple-injector