.NET Core使用IKVM实现对接Java

.NET Core使用C#实现对接Java,没有成功,现在来试试:使用IKVM实现对接Java
不再过多深究其细节实现差异,采用稳妥方式借用IKVM直接在C#中复制对接方Java代码应该可以搞定(https://github.com/ikvm-revived/ikvm)

根据经验来看,我只用到加密,应该只需要用到IKVM.OpenJDK.CoreIKVM.OpenJDK.Security两个库,于是我们在nuget上下载.NET Framework实现版本,我使用的是.NET Framework 4.7.2,想想.NET Framework 4.6+可以适配.NET Standard,那是否也可以经过编译后,通过.NET Core添加程序集引用呢?

.NET Framework 4.7.2引入上述核心库后,在控制台测试验证加密、验签一点问题都么有,好了,接下来则是将其编译,在.NET Core 3.1中添加程序集进行调用,加载程序集方法时直接抛出大致如下异常。

.

FileNotFoundException: Could not load file or assembly 'System.Configuration.ConfigurationManager, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51'. The system cannot find the file specified

继续添加对应版本程序集,版本过低,在nuget上根本找不到,涉及到.NET Core基础设施,看是否在github runtimes仓库能否找到对应issue。
在github runtimes仓库能否找到对应issue.png
解决了上述程序集问题,接下来再次运行,又来其他异常,.NET Core版本IO加载文件该方法已被剔除
,.NET Core版本IO加载文件该方法已被剔除.png
坑一波接着一波,看来使用.NET Core引用.NET Framework程序集此路行不通,而且这仅仅只是在windows下测试,发布到linux上出现的问题无法预知,我再次翻了下,居然发现了.NET Core分支,惊喜不惊喜,查看分支就可以知道已有老外在处理迁移到.NET Core版本,只是还处于未发布状态。
还处于未发布状态.png
适配.NET Core链接(https://github.com/ams-ts-ikvm/ikvm-bin/tree/net_core_compat/bin)
如果只是用到相关加密,只需引用上述链接bin目录下,如下库即可:
如果只是用到相关加密,只需引用上述链接bin目录下.png
最后,添加包以及版本(System.Configuration.ConfigurationManager),如下:
添加包以及版本(System.Configuration.ConfigurationManager).png
经过上述一番折腾过程,终于对接上,耗时一天多,真尼玛是不容易,搞完一个字,累的一p。
使用还未发布适配.NET Core的IKVM,在仅有时间内,快速对接上了Java加密,如若后续再遇到类似比较耗时耗力的加密方式,还不如使用IKVM,将更多时间花在处理业务逻辑上才是正道。