当前位置: 爱符号 - 所有分类 - 桌面应用 - C# - 异常:System.BadImageFormatException,未能加载正确的程序集XXX或其某一依赖项
异常:System.BadImageFormatException,未能加载正确的程序集XXX或其某一依赖项 YiChang:System.BadImageFormatException,WeiNengJiaZaiZhengQueDeChengXuJiXXXHuoQiMouYiYiLaiXiang
符号空间 发表于:2012-11-20 00:52:25 阅读(29698)
关键词:C# C# 异常 异常
摘要:近日需要实现一个导出功能,将数据导出到Excel中,由于以前写过,并且封装成一个类ExcelWriter,但是在调试的时候,出现一个奇怪的异常: 未在本地计算机上注册 Microsoft.Jet.OLEDB.4.0 提供程序

近日需要实现一个导出功能,将数据导出到Excel中,由于以前写过,并且封装成一个类ExcelWriter,但是在调试的时候,出现一个奇怪的异常:

未在本地计算机上注册 Microsoft.Jet.OLEDB.4.0 提供程序


首先,我可以肯定代码没有问题,所以首先想到的是,我电脑没有安装office,可能会缺少组件,但是细想这个是系统自带的不需要安装office的。

那么区别就是操作系统了,之前没有在win7 32位中测试过,而当前系统是windows 7 x64,回想经常遇到 64位系统,DLL文件位置混乱的问题,于是知道如何解决了。


将“解决方案资源管理器”中,找到当前项目,在它上面右键-属性,然后切换到“生成”选项卡,设置“目标平台”为:x86,并保存。再次编译,应该就可以了。

但是问题紧接着就来了,由于IIS7 默认应用程序池是 64位的ASP.NET,于是异常来了:

异常:System.BadImageFormatException,未能加载正确的程序集XXX或其某一依赖项


看到这个异常,我估计谁都会头大一阵子,不过还好,由于前面知道要设置为x86,加上以前观察过IIS7关于应用程序池的高级设置,所以这个问题也就简单了。

打开IIS7,在左侧列表中,选中“应用程序池”,然后在右边列表中,选中当前网站所在的程序池,最后点击右侧的链接“高级设置”

找到“启用 32 位应用程序”,将它的值设置为 “True”,并点击“确定”。这样就可以了。

所以在这里可以看出一个问题,DLL(类库)项目生成的平台一般是选择Any CPU的,而最终以x86还是x64运行,取决于运行的载体。EXE程序就是它自己,而网站就是IIS的宿主进程(w3wp.exe,在XP中是aspnet_wp.exe)。


前文提到的ExcelWriter,主要是用于导出数据到Excel,后期会与大家分享。它的同胞兄弟ExcelReader 用于从Excel中导入数据,支持xlsx。


声明:以上内容仅代表作者观点,不代表爱符号赞成此内容或立场