我有一个在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容器不会导致此安全冲突?
答案 0 :(得分:1)
我们忘记使用正确的属性标记该类,这会导致此异常。由于Microsoft已弃用对ASP.NET Web应用程序的部分信任,因此我们(Simple Injector贡献者)可能也不会投资于此区域。换句话说,不要指望我们修复错误(很快)。
要解决此问题,请实施您自己的SimpleInjectorDependencyResolver
。这样做是微不足道的;它只需几行代码即可从Simple Injector source code复制。