IKVM使用数据资源将jar转换为.net

时间:2018-06-28 13:58:03

标签: .net ikvm

我们有一个jar包,使用IKVMC在.Net DLL库中转换。 (ikvmc mylib.jar -target:library -out:mylib) 我们可以将其命名为Converted.dll

此Jar包含一些资源“ .cfg”数据。

在主应用程序(测试控制台.net)中使用DLL时,一切正常... 我们可以将其命名为Caller.exe

我们将.Net转换的DLL移动(引用)到另一个DLL库中,以仅包装和公开某些方法。 我们可以将其命名为WrapperOfConverted.dll

因此在Caller.exe中,我们引用WrapperOfConverted.dll而不是Converted.dll

现在,当我们从控制台应用程序(Caller.exe)调用包装程序(WrapperOfConverted.dll)时,它无法加载“ .cfg”数据文件(它们位于Converted.dll中)。

这很奇怪...也许我们必须以某种特定方式进行转换?

更新:

在Caller中的bin \ debug中,我引用了WrapperOfConverted.dll和Converd.dll(由WrapperOfConverted.dll引用)

使用ILSpy反编译Converted.dll,我可以清楚地看到dll中有一个“ Resources”文件夹,里面有一个带有原始jar名称的文件,ILSpy将该文件标记为嵌入式/公共。我可以从ILSpy保存该文件。另存为jar文件。解压缩。里面是原始jar的结构,所有带有类的文件夹都是空的,但是带有cfg文件的资源文件夹中已经充满了文件。

因此,数据cfg存在于Converted.dll中,但WrapperOfConverted.dll无法访问它。仅当存在三重引用时(调用方引用WrapperOfonverted REFERENCES Converteed) 如果我直接来自于Caller REFERENCE Con​​verted,一切似乎都可以。

另一个奇怪的事情是:我尝试在Caller中也引用了Converted,首先调用了转换的通用方法,当Caller然后在WrapperOfConverted中调用了某些方法,并且WrapperOfConverted在其内部的Converted方法中调用时,问题不再存在了,它看到cfg数据文件!

0 个答案:

没有答案