Revit插件InvokeMember加载DocumentFormat.OpenXml 2.16.0报找不到文件错误
Revit动态加载外部命令OpenXml依赖缺失报错问题
解决方案背景
- 开发了名为
kdsRibbon的Revit外部应用,用于在Revit中创建名为KDS TOOLS的功能区,功能区包含多个功能面板与操作按钮。 - 按钮绑定逻辑:通过
.InvokeMember属性将每个按钮关联至独立解决方案中的外部命令,功能区读取指定路径下外部命令的.dll文件,执行外部命令的Execute类。该模式支持无需重启Revit即可快速迭代外部命令,有效提升开发效率。
问题现象
功能区绑定的其中一个外部命令为ExportXLTM,对应按钮名称为Export/Import Excel,预期功能为将指定数据导出为.xltm格式的Excel文件。
实现该功能需要引用DocumentFormat.OpenXml组件支撑Excel导出相关能力,通过Nuget安装DocumentFormat.OpenXML后解决方案可正常构建,但调试过程中始终触发如下错误:
System.IO.FileNotFoundException: 'Could not load file or assembly 'DocumentFormat.OpenXml, Version=2.16.0.0, Culture=neutral, PublicKeyToken=8fb06cb64d019a17' or one of its dependencies. The system cannot find the file specified.'
当前梳理的程序执行链路为:kdsRibbon触发按钮逻辑 --> 动态调用外部命令 --> 外部命令启动运行 --> 加载DocumentFormat.OpenXml组件依赖 --> 抛出上述文件找不到错误。
已完成排查操作
已检索同类错误的通用解决方案并逐一验证,问题仍未解决,已尝试的操作包括:
- 将
DocumentFormat.OpenXml对应引用的「复制本地」属性设置为True - 确认
DocumentFormat.OpenXML与WindowsBase均已正确引入对应解决方案 - 尝试将两个依赖.dll文件拷贝至多个可能的检索路径,均未解决问题,涉及路径包括:
- 程序集引用默认文件夹
- 与
kdsRibbon.dll、ExportXLTM.dll同部署目录(二者本身已放在同一路径下) ExportXLTM解决方案的bin输出目录
- 确认
System.IO在功能区程序与外部命令项目中均已正确引用,错误仍复现。
待确认疑问
- 是否存在遗漏的必要配置项?
- 是否因使用
InvokeMember动态加载的实现方式,导致程序集检索路径出现偏差? - 目前已尝试所有可想到的排查方案,问题始终无法解决,求可行的排查及解决思路。
补充说明
因账号权限限制无法直接嵌入截图,相关参考材料包括:kdsRibbon功能区界面截图、ExportXLTM调试报错截图、kdsRibbon中InvokeMember动态加载逻辑及报错位置截图。
内容的提问来源于stack exchange,提问作者JCastro
相关产品推荐
相关产品推荐

