IKVM - getResourceAsStreams returns 空

IKVM - getResourceAsStreams returns null

将带有 IKVM 的 Java 库编译成 DLL 后,出现以下错误:

getResourceAsStream("path/to/resource.file") == null"

库尝试使用以下代码从自己的 jar 文件加载 Java 资源:

Thread.currentThread().getContextClassLoader().getResourceAsStream("path/to/resource.file")

作为解决方法,我尝试将资源文件复制到我的 .NET 项目的主目录中,并使用资源参数调用 ikvmc:

ikvmc java-library.jar -target:library -resouce:/path/to/resource.file=resource.file

奇怪的是生成的 DLL 包含一个 resource.jar 只包含一个空目录结构 /path/to/resource.file 其中 resource.file 不是文件,而只是另一个空目录

有没有办法用 ikvmc 将 Java 库编译成 DLL,其中 Java 代码用 ContextClassLoader.getResourceAsStream() 读取资源文件?

问题是由 class 加载程序的决定引起的。 Java 库使用上下文 class 加载程序:

Thread.currentThread().getContextClassLoader()

在 IKVM 中,这似乎是用于整个 .NET 运行时的通用 class 加载程序。这个无法从 JAR 文件加载资源。当更改 Java 库以使用加载包含资源加载代码的 class 的相同 class 加载器时,资源也会通过 IKVM 正确加载:

ClassLoader currentClassLoader = MyClass.class.getClassLoader();
URL url = currentClassLoader.getResource("resource/name");