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
相关产品推荐
相关产品推荐

