Embedded resource IKVM-getResourceAsStreams返回null

Embedded resource IKVM-getResourceAsStreams返回null,embedded-resource,ikvm,Embedded Resource,Ikvm,在将带有IKVM的Java库编译为DLL后,出现以下错误: getResourceAsStream("path/to/resource.file") == null" 库尝试使用以下代码从自己的jar文件加载Java资源: Thread.currentThread().getContextClassLoader().getResourceAsStream("path/to/resource.file") 作为解决方法,我尝试将resource文件复制到.NET项目的主目录中,并使用resou

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

getResourceAsStream("path/to/resource.file") == null"
库尝试使用以下代码从自己的jar文件加载Java资源:

Thread.currentThread().getContextClassLoader().getResourceAsStream("path/to/resource.file")
作为解决方法,我尝试将resource文件复制到.NET项目的主目录中,并使用resource参数调用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()读取资源文件?

问题是由类加载器上的决策引起的。Java库使用上下文类加载器:

Thread.currentThread().getContextClassLoader()
在IKVM中,这似乎是用于整个.NET运行时的通用类装入器。这个无法从JAR文件加载资源。将Java库更改为使用加载包含资源加载代码的类的同一类加载器时,也会使用IKVM正确加载资源:

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