升级Saxon API至10.5.1.0版本后遭遇IKVM.OpenJDK.Security程序集加载失败问题求助
这个报错是Saxon版本跨大升级后典型的依赖不匹配问题——Saxon 9.7依赖的IKVM版本和10.5完全不兼容,旧版的IKVM.OpenJDK.Security(8.1.5717.0)已经满足不了新版本的要求了。下面给你几个实用的解决步骤:
彻底清理旧IKVM引用
先把项目里所有和旧版IKVM相关的内容删掉:包括NuGet包里的IKVM组件、手动添加的IKVM程序集引用,还有配置文件里相关的绑定重定向。旧版本的IKVM和Saxon 10.5完全冲突,留着只会添乱。重新安装Saxon 10.5官方NuGet包
别再手动复制程序集了,直接通过NuGet安装官方的Saxon包(比如Saxon-HE,如果是商业版就装对应版本)。官方包会自动引入匹配版本的IKVM依赖,确保所有必要组件都到位,版本也不会错。检查并修正程序集绑定重定向
打开项目的App.config或Web.config,如果里面有指向IKVM.OpenJDK.Security, Version=8.1.5717.0的绑定重定向,要么把版本号改成Saxon 10.5实际依赖的IKVM版本(可以在NuGet包的依赖列表里查到),要么直接删掉这条重定向——官方NuGet包会自动生成正确的配置。验证输出目录的程序集完整性
构建项目后,去输出文件夹(比如bin/Debug)里确认一下:Saxon 10.5需要的IKVM相关程序集是不是都在。如果有缺失,右键对应的引用,把“复制本地”改成True,确保构建时能把依赖组件复制过去。处理跨组件依赖冲突
如果你的项目里还有其他组件依赖旧版IKVM,那要么升级那些组件到兼容Saxon 10.5的版本,要么用绑定重定向来隔离不同版本的IKVM,避免互相干扰。
另外你提到的代码行_healthCheckServiceHost = new WebServiceHost(new NancyWcfGenericService(), new Uri(httpEndPoint));本身是WCF服务初始化,但报错出在IKVM加载上,说明这个NancyWcfGenericService内部肯定调用了升级后的Saxon组件,所以核心还是解决依赖版本不匹配的问题。
内容的提问来源于stack exchange,提问作者Dipak Shinde

