You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

IE无法找到C# ActiveX控件引用的自制DLL问题求助

解决ActiveX控件引用自定义DLL时的FileNotFoundException问题

针对你遇到的这个System.IO.FileNotFoundException异常,我整理了几个实用的排查和修复方向,你可以一步步来试:

1. 先确认DLL的部署位置是否正确

ActiveX控件运行时会在特定路径里找依赖的DLL,你得确保MtnLib.dll放在以下任意一个位置:

  • 和你的ActiveX控件主DLL(比如CSActiveX.dll)完全相同的目录下
  • 如果是被IE这类宿主程序加载,也可以放到宿主的启动目录(比如IE安装目录Program Files\Internet Explorer)
  • 或者把这个DLL所在的路径添加到系统的PATH环境变量里

2. 核对DLL的版本和强签名是否匹配

异常信息里明确给出了版本1.0.0.0和公钥令牌111045ceeaeac3e4,你要确认:

  • 实际部署的MtnLib.dll确实是这个版本,并且带有对应的强签名
  • 项目里引用的DLL和你部署到运行环境的是同一个文件,别搞混了开发环境的测试版本和最终部署版本

你可以用这个命令查看DLL的公钥令牌,和异常里的对比:

sn -T MtnLib.dll

3. 排查是否是依赖项缺失

异常里说“或它的某一个依赖项”找不到,有可能不是MtnLib.dll本身,而是它依赖的其他组件没部署。你可以用这两个方法排查:

  • 用dumpbin命令查看MtnLib.dll的依赖列表:
    dumpbin /dependents MtnLib.dll
    
    然后确认列表里的所有组件都已经部署到合适的位置
  • 用Process Monitor(ProcMon)跟踪控件加载时的文件查找行为,能精准定位到底是哪个文件找不到

4. 检查ActiveX的注册参数

如果你的ActiveX控件是用Regasm.exe注册的,记得加上/codebase参数(没装到GAC的话必须加),命令是这样的:

Regasm.exe CSActiveX.dll /codebase

这个参数会在注册表中写入DLL的具体路径,帮助CLR准确找到文件。

5. 考虑把DLL安装到GAC

如果MtnLib.dll是强命名的,也可以把它安装到全局程序集缓存(GAC)里,这样CLR就能全局识别到它:

gacutil /i MtnLib.dll

注意:装到GAC的DLL必须是强命名的,而且版本、公钥令牌要和异常里的完全一致。


内容的提问来源于stack exchange,提问作者niceman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 08:49:03