首页 > 解决方案 > 尝试迭代类型时发生反射类型加载异常

问题描述

我的 .Net 应用程序引用了一些 nuget 包。当我尝试使用 JavaNet 在 java/scala 中使用 .Net DLL 时。请让我知道如何解决此错误。谢谢

我得到以下“消息:无法加载一个或多个请求的类型。检索 LoaderExceptions 属性以获取更多信息。堆栈跟踪:在 System.Reflection.RuntimeModule.GetTypes(RuntimeModule module) at System.Reflection.Assembly.GetTypes( ) 在 SicsClrController.Engine.ClrEngine.FindTypeInAssembly(Assembly assembly, String className, List`1 genericTypes)。加载程序异常: -------------------------加载程序异常 #0

消息:无法加载文件或程序集“System.Memory,Version=4.0.1.0,Culture=neutral,PublicKeyToken=cc7b13ffcd2ddd51”或其依赖项之一。该系统找不到指定的文件。完整打印:System.IO.FileNotFoundException:无法加载文件或程序集“System.Memory,Version=4.0.1.0,Culture=neutral,PublicKeyToken=cc7b13ffcd2ddd51”或其依赖项之一。该系统找不到指定的文件。文件名:'System.Memory,版本=4.0.1.0,Culture=neutral,PublicKeyToken=cc7b13ffcd2ddd51'"

标签: javonet

解决方案


您遇到问题的库是 System.Memory,它是一个框架库。

因此,可能有多种原因:

  1. 确保它在 .NET 本身中工作,有时 Nuget 包引用框架库的具体版本,这可能与其他 nuget 包冲突,即使没有 Javonet,也会导致类似问题
  2. 如果它在纯 .NET 中工作,那么某些库动态加载 System.Memory 可能会出现问题,在这种情况下,Javonet 有时可能无法识别正确的版本。解决方案是使用在 .NET 中注入事件 AssemblyLoad 并提供基于具体 System.Memory 实现的库名称的完整路径的小助手。

您可以使用来自 Javonet 的助手:http: //download.javonet.com/support/AssemblyResolverLibV2.zip

Javonet.addReference("AssemblyResolverLib.dll");

//Register custom sections DLLs (if you have more than one call this line for each DLL)
Javonet.New("AssemblyResolver","log4net","c:\\samplepath\\log4net.dll");

推荐阅读