调用Assembly.GetTypes()时抛出的reflectiontypeloadexeption

本文关键字:reflectiontypeloadexeption Assembly GetTypes 调用 | 更新日期: 2023-09-27 18:03:40

我最近升级到ASP。. Net MVC 5和升级我的代码不再运行。

我正在执行插件加载通过反映类型在我当前的AppDomain。

Assembly[] assemblies = AppDomain.CurrentDomain.GetAssemblies();
IEnumerable<Type> types = assemblies.SelectMany(o => o.GetTypes()).ToList(); // <-- Throws error

我在Microsoft.Web.Mvc程序集上得到错误:

无法加载一个或多个请求的类型。检索

,在检索加载器异常时,我得到以下内容:

  • [0]{系统。在重写成员时违反了继承安全规则:ModelMetadata System.Web.Mvc.ControllerContext)"。重写方法的安全可访问性必须与被重写方法的安全可访问性相匹配。}系统。异常{系统。TypeLoadException}
  • [1]{系统。在重写成员时违反了继承安全规则:ModelMetadata System.Web.Mvc.ControllerContext)"。重写方法的安全可访问性必须与被重写方法的安全可访问性相匹配。}系统。异常{系统。TypeLoadException}
  • [2]{系统。在重写成员时违反了继承安全规则:ModelMetadata System.Web.Mvc.ControllerContext)"。重写方法的安全可访问性必须与被重写方法的安全可访问性相匹配。}系统。异常{系统。TypeLoadException}
  • [3]{系统。类型:'Microsoft.Web.Mvc.CookieValueProviderFactory'违反了继承安全规则。派生类型必须要么与基类型的安全可访问性相匹配,要么不可访问。}系统。异常{系统。TypeLoadException}
  • 等等…

我知道MVC团队删除了AllowPartialTrustedCallers组装属性。这是一个突破性的变化http://www.asp.net/visual-studio/overview/2013/release-notes#knownissues。我的网络。配置设置为完全信任,但仍然不允许。

有什么想法?

调用Assembly.GetTypes()时抛出的reflectiontypeloadexeption

看起来你正在使用一些MVC 4 dll。

注意,作为一个副作用,您不能在同一个应用程序中使用4.0和5.0程序集。您需要将它们全部更新到5.0。

您可能需要查看哪些程序集试图加载为4个版本。

这是一个问题的原因是MVC 4组件被归因于AllowPartialTrustedCallers,然而MVC 5组件没有。

由于MVC 5 DLL具有MVC 4 DLL的基类,因此MVC 4 DLL需要对其类具有相同或更严格的权限。因为它没有(这就是为什么这是一个破坏性的更改)安全系统失败。

还要注意,这是一个运行时错误,部分原因是构建版本没有这个问题(您实际上是在交换一个新的基类)。

相关文章:
  • 没有找到相关文章