类型初始化异常

Posted

技术标签:

【中文标题】类型初始化异常【英文标题】:Type initialization exception 【发布时间】:2012-09-07 15:48:43 【问题描述】:

我创建了 imageHolder 类:

public class ImageHolder : Image<Bgr, Byte>
   
    private String imagePath;

    public ImageHolder(String path):base(path)
    
       this.imagePath = path;                     
       
    public String imgPathProperty
    
        get
         return imagePath; 
        set
         imagePath = value; 
    

我创建类的实例并初始化它,如下所示:

private ImageHolder originalImageHolder;
originalImageHolder = new ImageHolder(openFileDialog.FileName);

在运行时我得到这个异常:

“Emgu.CV.CvInvoke”的类型初始化程序引发异常。

这是解决方案资源管理器窗口:

知道为什么会出现此异常以及如何修复它吗?

提前谢谢你。

【问题讨论】:

好像找不到opencv_core240.dll;这需要在同一个文件夹中吗? 不完全是这个的副本(因为没有接受的答案)但也许this other question 上的一些信息和答案可能对你有用 重申和扩展@zimdanen 所说的内容,InnerException 文本指出它无法加载 zimdanen 提到的 DLL。有关说明,请参阅 ***.com/questions/2066180/…。 【参考方案1】:

只要静态构造函数抛出异常,或者当您尝试访问静态构造函数抛出异常的类时,就会抛出 TypeInitializationException (您看到的异常) - 它的 InnerException 属性是包含实际引发的异常的详细信息 - 这是您需要调查的异常。

在这种情况下,从您的屏幕截图来看,问题似乎是找不到 DLL“opencv_core240.dll”。这可能有多种原因

找不到 DLL 找不到 DLL 的依赖项之一 DLL 的图像格式不正确(32 位而不是 64 位)

我建议你看看this question,看看那里的任何建议是否对你有帮助。

【讨论】:

【参考方案2】:

检查此字段对我有用。在项目→属性→构建(主/启动项目)

【讨论】:

是的 - 这也为我解决了这个问题。原来我的项目需要的 DLL 只能以 32 位运行!哦!【参考方案3】:

我通过重新安装 MSVCRT 9.0 SP1 x86解决了这个问题

【讨论】:

以上是关于类型初始化异常的主要内容,如果未能解决你的问题,请参考以下文章

EmguCV 类型初始化异常

类型初始值设定项引发异常

Emgu.CV.CvInvoke”的类型初始值设定项引发异常。

类型初始值设定项引发异常

从 C# 错误调用 Matlab 函数:“tes.tambah”的类型初始化程序引发异常

“MyClass”的类型初始值设定项引发异常