签名XML文档遇数字签名异常:加载程序格式错误(0x8007000B)
这个错误我之前帮不少开发者踩过坑,大概率是32位/64位程序架构不兼容导致的——虽然你说执行到xmlDoc.Load("test.xml");前一切正常,但实际上是当代码触发加载某个依赖的非托管库(或者跨架构的.NET运行时调用)时,才暴露出架构不匹配的问题。下面是几个最常见的排查方向:
项目平台目标不匹配
右键你的项目→属性→生成→平台目标,确认这个设置和你引用的所有组件(包括第三方库、系统依赖组件)的架构一致。比如你引用了32位的原生DLL,但项目设为Any CPU且勾选了“首选32位”,或者反过来64位项目引用了32位库。
不确定的话,先尝试把平台目标改成x86或者x64(别用Any CPU),再编译运行试试。Web项目的IIS应用程序池设置问题
如果是ASP.NET项目,去IIS的应用程序池高级设置里,调整“启用32位应用程序”选项:如果你的项目是32位就设为True,64位就设为False——很多时候Web项目的这个设置和项目架构不匹配会触发这个错误。XML相关依赖组件的架构冲突
有些XML处理场景会用到非托管库(比如自定义解析器、加密XML用到的原生组件),检查你引用的NuGet包或者本地DLL,确保它们的版本(32/64位)和当前程序架构完全对应。XML文件中的外部资源引用问题
看看你的test.xml里有没有引用DTD、XSLT或者其他外部资源?如果这些资源背后依赖了架构不匹配的组件,也会在Load的时候触发这个错误。可以暂时移除这些引用,测试是否能正常加载XML文件,来定位问题。极端情况:系统组件损坏
极少数情况下,系统里的.NET Framework或XML相关系统组件损坏也会导致这个问题。可以尝试修复.NET Framework(如果用的是.NET Framework),或者重新安装对应的运行时。
内容的提问来源于stack exchange,提问作者Enkhbold Munkhbold




