.NET Framework 4.8 WinForms中Emgu.CV加载cvextern.dll失败如何解决?
解决Emgu.CV中
cvextern.dll找不到的异常 针对你遇到的System.TypeInitializationException(内部为DllNotFoundException: Unable to load DLL 'cvextern')问题,以下是几种可行的修复方案:
1. 放弃Any CPU,指定具体目标平台
Emgu.CV依赖的OpenCV原生DLL分32位和64位版本,Any CPU模式下运行时无法自动匹配正确的架构,导致DLL加载失败:
- 右键项目 → 属性 → 生成
- 将“平台目标”从
Any CPU改为x86或x64(根据你的系统和需求选择) - 重新生成项目
2. 确保安装了包含原生依赖的NuGet包
仅安装Emgu.CV核心包可能缺少Windows平台的原生DLL,需要补充安装对应的运行时包:
- 在NuGet包管理器中卸载现有的
Emgu.CV包 - 安装
Emgu.CV.runtime.windows包(该包包含Windows平台所需的cvextern.dll及OpenCV相关原生文件) - 重新生成项目
3. 验证原生DLL是否被复制到输出目录
检查项目的输出目录(bin/Debug或bin/Release)下是否存在对应架构的cvextern.dll:
- 如果输出目录中没有,手动从NuGet包安装路径复制:
比如路径为packages/Emgu.CV.runtime.windows.x.x.x/runtimes/win-x64/native(替换x.x.x为实际包版本,win-x64对应x64平台,win-x86对应x86平台) - 将该路径下的所有DLL复制到项目输出目录的根目录,或者对应架构的子目录中
- 也可以在项目中添加这些DLL作为内容文件,设置“复制到输出目录”为如果较新则复制
4. (可选)保留Any CPU时启用“首选32位”
如果必须使用Any CPU模式,可以尝试:
- 右键项目 → 属性 → 生成
- 勾选“首选32位”选项
- 这种方式会让程序在64位系统上以32位模式运行,加载32位版本的
cvextern.dll,但仅适用于兼容32位的场景
内容的提问来源于stack exchange,提问作者Daniel Lip
相关产品推荐
相关产品推荐

