VS2015 Express引用旧OCX后,依赖项目出现.NET框架依赖解析错误
解决.NET 2.0项目引用旧OCX后依赖项目编译报错的问题
兄弟,我之前踩过一模一样的坑!用VS 2015搞.NET 2.0项目,加了老掉牙的OCX之后,主程序集编译正常,但引用它的测试项目就炸一堆错,太闹心了。咱们来一步步搞定它:
为啥会出这问题?
当你在MyAssembly里加旧OCX引用时,VS会自动生成互操作程序集(Interop.*.dll),但默认生成的这个玩意大概率不符合.NET 2.0的严格要求——要么偷偷依赖了高版本框架,要么类型库解析有问题,导致MyAssemblyTester编译时认不出这些依赖。
具体解决步骤
1. 手动生成符合.NET 2.0的互操作程序集
别用VS自动生成的,咱们用官方工具tlbimp.exe自己搞,确保完全适配.NET 2.0:
- 先开VS 2015的开发者命令提示符(一定要管理员身份,不然可能有权限问题)
- 敲这个命令,把路径和组件名换成你的:
比如针对Teechart的例子:tlbimp.exe "你的OCX文件的完整路径.ocx" /out:Interop.你的组件名.dll /platform:v2.0 /namespace:你想用的命名空间tlbimp.exe "C:\Tools\TeeChartPro.ocx" /out:Interop.TeeChartPro.dll /platform:v2.0 /namespace:TeeChart - 生成完之后,把这个手动做的互操作dll加到MyAssembly项目的引用里,把之前VS自动加的那个删掉。
2. 检查MyAssembly的编译设置
- 右键MyAssembly项目 → 属性 → 生成标签:
- 确认目标框架是**.NET Framework 2.0**,别不小心选成更高版本了
- 平台目标选x86!旧OCX基本都是32位的,64位环境下肯定出问题
- 可以勾选“为COM互操作注册”,这步不是必须,但能避免一些奇怪的注册问题
3. 修复MyAssemblyTester的引用和设置
- 先把MyAssemblyTester里对MyAssembly的引用删掉,然后重新加一遍——确保引用的是刚重新编译好的MyAssembly
- 同样检查MyAssemblyTester的目标框架是.NET 2.0,平台目标也选x86,和MyAssembly保持一致
- 最后清理整个解决方案,再重新生成:右键解决方案 → 清理,然后右键 → 重新生成解决方案
4. 要是还不行?试试这个
如果上面的步骤都没用,可能是旧OCX的类型库本身不规范,尤其是如果它是WinForms控件的话,用aximp.exe生成专门的WinForms互操作程序:
aximp.exe "你的OCX文件的完整路径.ocx" /out:AxInterop.你的组件名.dll /platform:v2.0
然后把生成的AxInterop.*.dll和之前的Interop.*.dll都加到项目引用里。
额外提醒
- 旧OCX必须先注册到系统里!用管理员身份开cmd,敲
regsvr32 "你的OCX文件的完整路径.ocx"注册一下 - 确认VS 2015装了.NET Framework 2.0的开发组件,虽然默认带,但有时候可能因为安装问题缺失,去控制面板的程序和功能里修复VS就能解决
内容的提问来源于stack exchange,提问作者Fabius Wiesner




