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

连续两天都为这个运行时错误“类型初始值设定项引发异常”而烦恼,调试也不知道哪里出了问题。上网Google一下,一大堆相同的问题,可是按照那些方法折腾来折腾去,问题还是一样。最后在优快云上发帖子问了,果然“重赏之下必有勇夫”,很快就有高手回复了,问题也随着解决了。哈哈。在此写个随笔,以后如果大家遇到类似问题,也可参考一下,自己也做个备忘,不然放在电脑上,又找不到,我的电脑文件到处乱放,有时连我自己都找不到^_^。
  问题是这样嘀:
  项目采用了三层架构和工厂模式,并借鉴了PetShop的架构,因为这个项目也是采用分布式的数据库,目前只有三个数据库,主要出于提高访问性能考虑。
  原来是按照网上对PetShop的介绍来给各项目添加引用的。
  1、Web 引用 BLL。 
     2、BLL 引用 IDAL,Model,使用DALFactory创建实例。 
     3、IDAL 引用 Model。  
     4、Model 无引用。  
     5、DALFactory 引用IDAL,通过读取web.config里设置的程序集,加载类的实例,返回给BLL使用。  
     6、SQLServerDAL 引用 Model和IDAL,被DALFactory加载的程序集,实现接口里的方法。
    问题就出在这里了。顶!
    按照PetShop的架构,是DALFactory程序集里通过反射创建针对特定数据访问层里的对应类实例,这样BLL调用接口时就知道调用这个对应类实例里的实现方法。
    而反射动态加载程序集是通过这种方法 Assembly.Load("程序集").CreateInstance("命名空间.类"),其中的“程序集”读取的是Web层bin文件夹下对应的dll,即反射加载的程序集dll在Web层的bin文件夹必须有,不然就会出现如题的错误。问题解决了~^_^
    出现这种错误的另两种情况,这也是在网上看到的,一起写下来。
    一、Web.config配置错误。
          在DALFactory程序集里的DataAccess类里,通过
          private static readonly string path = ConfigurationManager.AppSettings["WebDAL"];
          来获得程序集的名称的。
          在Web.config里我的配置如下:
          <appSettings>
          <add key="WebDAL" value="PDMS.SQLServerDAL"/>
          </appSettings>
    二、程序集名称和默认命名空间错误。
          在各个程序集右键--属性,看看程序集名称和默认命名空间有没有写错。这个问题也可能导致如题的错误~~
   
    第一次用反射,就出了这个问题,学到不少,还得加深对反射的理解^_^

转载于:https://www.cnblogs.com/bluecountry/archive/2009/02/15/1390936.html

### 解决 MatlabPostProcGui.MatlabPostProcGUIClass 类型初始化时出现异常 当遇到 `MatlabPostProcGui.MatlabPostProcGUIClass` 类型初始值设定项引发异常的情况,通常意味着类的静态构造函数或静态字段初始化期间发生了未处理的异常。此类问题可能由多种原因引起,包括但不限于依赖关系缺失、资源加载失败或其他内部逻辑错误。 #### 可能的原因及解决方案 1. **检查依赖项** 如果该类依赖于其他组件或库,确保这些依赖已正确定义并可用。任何缺少或版本冲突都可能导致初始化失败[^4]。 2. **验证配置文件设置** 对于 .NET 应用程序而言,应用程序配置文件 (App.config 或 Web.config) 中不当的配置也可能导致类型初始化异常。特别是对于 COM 组件集成场景下,确认所有必要的注册表条目存在,并且配置节顺序正确无误——即 `<configSections>` 必须位于根 `<configuration>` 元素之下作为第一个子元素。 3. **审查日志记录** 查看应用的日志输出可以帮助定位具体抛出异常的位置及其上下文信息。通过调试模式启动应用程序可以提供更多关于发生位置的信息。 4. **考虑互操作性问题** 当涉及到 MATLAB 和 C# 的交互时,考虑到两者之间的数据交换方式可能会引入兼容性挑战。例如,MATLAB 函数返回的数据结构是否能够被托管代码无缝接收和解释? 5. **更新软件包** 使用最新稳定版的相关 SDKs/Toolboxes 来减少因旧版本中存在的 bug 而引起的潜在风险。 ```csharp try { var instance = new MatlabPostProcGui.MatlabPostProcGUIClass(); } catch (TypeInitializationException ex) { Console.WriteLine($"Failed to initialize type due to: {ex.InnerException?.Message}"); } ``` 上述代码片段展示了如何捕获并打印内层异常消息以便更好地理解根本原因所在。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值