无法加载程序集DocumentFormat.OpenXml问题求助(已尝试常规方案)
我完全懂你的糟心——已经试过了大家都在提的安装并引用DocumentFormat.OpenXml 2.5的方案,可还是栽在这个报错上。明明VS2012已经识别了ClosedXML 0.93和它依赖的DocumentFormat.OpenXml 2.5,dll也都放到了exe旁边,问题却依旧存在。咱们得从更深层的地方排查,给你几个针对性的方案:
配置程序集绑定重定向
ClosedXML 0.93对DocumentFormat.OpenXml的版本有严格依赖,有时候哪怕你引用了2.5,运行时还是会尝试加载其他版本的程序集。你需要在项目的app.config(Web项目则是web.config)里添加绑定重定向配置,强制指定使用2.5版本:<runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <dependentAssembly> <assemblyIdentity name="DocumentFormat.OpenXml" publicKeyToken="8fb06cb64d019a17" culture="neutral" /> <!-- 把oldVersion范围和newVersion改成你实际引用的精确版本 --> <bindingRedirect oldVersion="0.0.0.0-2.5.5631.0" newVersion="2.5.5631.0" /> </dependentAssembly> </assemblyBinding> </runtime>你可以在VS里右键DocumentFormat.OpenXml引用→属性,查看“版本”字段,把配置里的版本号换成这个精确值。
确认“复制本地”属性已开启
虽然你已经把dll放到了exe旁边,还是要检查VS里的引用设置:右键DocumentFormat.OpenXml和ClosedXML的引用→属性,确保“复制本地”选项是True。这个属性有时候会因为项目配置变更被意外重置,重新确认下能避免很多加载问题。检查项目目标框架版本
ClosedXML 0.93要求的最低.NET框架版本是4.0,而VS2012默认可能有不同的设置。右键你的项目→属性→应用程序,查看“目标框架”是否是.NET Framework 4.0或更高版本。如果是更低的版本,很可能导致程序集加载失败。清理缓存并重新生成解决方案
VS的缓存有时候会搞出奇怪的引用问题,试试这几步:- 点击菜单栏的「生成」→「清理解决方案」
- 手动删除项目下的
bin和obj文件夹 - 再点击「生成」→「重新生成解决方案」
排查GAC中的冲突版本
如果你的系统全局程序集缓存(GAC)里安装了其他版本的DocumentFormat.OpenXml,运行时可能会优先加载GAC里的版本,和ClosedXML依赖的2.5版本冲突。你可以打开管理员权限的命令提示符,运行gacutil /l DocumentFormat.OpenXml查看GAC里的版本。如果有其他版本,可以暂时移除(操作GAC需谨慎),或者通过上面的绑定重定向强制指定使用2.5版本。
内容的提问来源于stack exchange,提问作者J R

