You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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的开发者命令提示符(一定要管理员身份,不然可能有权限问题)
  • 敲这个命令,把路径和组件名换成你的:
    tlbimp.exe "你的OCX文件的完整路径.ocx" /out:Interop.你的组件名.dll /platform:v2.0 /namespace:你想用的命名空间
    
    比如针对Teechart的例子:
    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

火山引擎 最新活动