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

连续两天都为这个运行时错误“类型初始值设定项引发异常”而烦恼,调试也不知道哪里出了问题。上网Google一下,一大堆相同的问题,可是按照那些方法折腾来折腾去,问题还是一样。最后在CSDN上发帖子问了,果然“重赏之下必有勇夫”,很快就有高手回复了,问题也随着解决了。哈哈。在此写个随笔,以后如果大家遇到类似问题,也可参考一下,自己也做个备忘,不然放在电脑上,又找不到,我的电脑文件到处乱放,有时连我自己都找不到^_^。
  问题是这样嘀:
  项目采用了三层架构和工厂模式,并借鉴了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>
二、程序集名称和默认命名空间错误。
在各个程序集右键--属性,看看程序集名称和默认命名空间有没有写错。这个问题也可能导致如题的错误~~

第一次用反射,就出了这个问题,学到不少,还得加深对反射的理解^_^

### 回答1: "Osgeo.gdal.gdalpinvoke"的类型初始值设定引发异常,一般是由以下几个原因引起的: 1. 缺少GDAL安装:如果没有正确安装GDAL库,该异常可能会被触发。请确保已经正确安装了GDAL库,并且相应的GDAL.dll文件位于正确的路径下。 2. 版本不兼容:如果使用的GDAL库的版本与代码中的版本不兼容,也会引发异常。请检查代码中对GDAL库的引用以及所使用的GDAL库的版本,确保它们是兼容的。 3. 缺少依赖:GDAL库可能依赖其他一些库文件或组件,如果缺少了这些依赖,也可能导致该异常。请检查系统中是否已正确安装了所需的依赖,并确保它们是最新的、完整的版本。 4. 环境配置错误:有时,异常可能是由于环境配置错误所致。检查是否设置了正确的环境变量,并且GDAL库的路径能够正确被找到。 如果经过以上检查后仍然无法解决该异常,建议参考GDAL官方文档或寻求相关开发者社区的帮助,以获取更具体的解决方案。 ### 回答2: "osgeo.gdal.gdalpinvoke"的类型初始值设定引发异常,可能是由于以下几个原因引起的: 1. GDAL库未正确安装:首先,请确保您已经正确安装了GDAL库。检查您的环境变量是否正确设置,并且库文件位于正确的路径下。 2. 版本不匹配:如果您的应用程序中使用的GDAL库版本与您安装的版本不匹配,可能会引发异常。请确保您的应用程序和GDAL库的版本一致。 3. 缺少依赖:GDAL库可能依赖于其他一些库或组件。请确保您在安装GDAL库时已经安装了所有的依赖,并且它们也正确地设置在环境变量中。 4. 平台不匹配:如果您的应用程序和GDAL库是在不同的平台上编译的,例如一个是在32位平台上编译,另一个是在64位平台上编译,可能会导致该异常。请确保您的应用程序和GDAL库的平台一致。 5. 资源冲突:如果您在应用程序中同时使用了其他库,可能会存在资源冲突导致该异常。请确保您的应用程序中没有其他库与GDAL库产生冲突。 如果以上方法都无法解决该异常,建议您查看异常的详细信息以获取更多的线索,并参考GDAL库的官方文档或社区来解决问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值