引起FileNotFoundException原因通用分析过程

简介:

有的时候,你在双击一个托管程序,或者使用Assembly.Load方法加载一些Assembly的时候,CLR会抛出System.FileNotFoundException,这种异常经常让人误解。例如有一个托管程序A,引用了dll B,虽然AB都在同一个文件夹里面,但是当你试图运行A的时候,还是会有类似下面的异常抛出来:

Unhandled Exception: System.IO.FileLoadException: Could not load file or assembly 'TestLib, Version=1.0.0.0, Culture=neutral, PublicKeyToken=eb9fb5aa4f452bda' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)

 

File name: 'TestLib, Version=1.0.0.0, Culture=neutral, PublicKeyToken=eb9fb5aa4f452bda'

   at App.Main()

 

在工作当中,我发现很多程序员在资源管理器里面双击程序以后,看到程序在启动阶段抛出异常就束手无措了,因为这种异常不像程序在执行过程中发生的异常 — 还有机会调试,这种异常不能通过单步跟踪的方式来发现问题所在。

 

像这种托管程序在资源管理器通过双击启动时就抛出异常的情况,我建议大家在排错的时候,首先在命令行程序里面重新执行一下出错的程序,当然啦,结果是一样的 — 还是启动不起来,但是在命令行里面执行有一个好处,CLR会将完整的异常信息打印在命令行里面,很多异常信息实际上都提供了丰富的错误原因描述,有的时候还提供了排错需要使用的方法,例如下图:


按照上面红线高亮显示的部分设置好注册表对应的键值,并且重新执行一遍程序你就可以找出错误原因了。

 

除了上面说到的方法,CLR实际上还提供了一个叫做FUSLOGVW.exe的工具,也是可以用来检查FileNotFoundException的原因的,用法如下:

1.         打开FUSLOGVW.exe,点击“Settings…”按钮。

2.         在弹出的对话框里面选中“Log bind failures to disk”(告诉CLR将加载Assembly失败的一些错误信息保存在磁盘里)。

3.         为了能够看到错误信息,勾上“Enable custom log path”复选框,并且在“Custom log path”文本框里面设置好保存的路径(注意,只能填写文件夹的完整路径)

4.         重新执行发生错误的程序,发生FileNotFoundException异常以后,切换回FUSLOGVW.exe并点击“Refresh”按钮。

5.         这时候你应该可以在旁边的列表框里面看到有一些新列表项(都是加载失败的Assembly的具体错误信息),双击其中一项就可以看到加载失败的具体原因了。



本文转自 donjuan 博客园博客,原文链接: http://www.cnblogs.com/killmyday/archive/2009/03/10/1407433.html  ,如需转载请自行联系原作者

相关文章
|
SQL 缓存 JSON
vue利用级联选择器实现全国省市区乡村五级菜单联动
vue利用级联选择器实现全国省市区乡村五级菜单联动
|
安全 关系型数据库 数据库
Postgresql 数据库用户权限授权(用户角色分配模式)
为了更方面和安全地管理数据库用户账号权限安全,实现通过用户角色代理的模式,实现用户账号功能授权的模式
19983 2
Postgresql 数据库用户权限授权(用户角色分配模式)
|
存储 JSON API
SpringBoot3集成ElasticSearch
SpringBoot3集成ElasticSearchElasticsearch是一个分布式、RESTful风格的搜索和数据分析引擎,适用于各种数据类型,数字、文本、地理位置、结构化数据、非结构化数据;
1569 0
|
存储 小程序 Python
农历节日倒计时:基于Python的公历与农历日期转换及节日查询小程序
### 农历节日倒计时:基于Python的公历与农历日期转换及节日查询小程序 该程序通过`lunardate`库实现公历与农历的日期转换,支持闰月和跨年处理,用户输入农历节日名称后,可准确计算距离该节日还有多少天。功能包括农历节日查询、倒计时计算等。欢迎使用! (239字符)
804 86
|
8月前
|
网络协议 Java 开发工具
全平台开源即时通讯IM框架MobileIMSDK:7端+TCP/UDP/WebSocket协议,鸿蒙NEXT端已发布,5.7K Stars
全平台开源即时通讯IM框架MobileIMSDK:7端+TCP/UDP/WebSocket协议,鸿蒙NEXT端已发布,5.7K Stars
515 1
|
存储 安全 Shell
Android系统 adb shell auth授权使用
Android系统 adb shell auth授权使用
1713 2
|
算法 安全 Serverless
超级好用的C++实用库之国密sm3算法
超级好用的C++实用库之国密sm3算法
711 0
|
JavaScript 算法 定位技术
利用Cesium和JS实现地点点聚合功能
利用Cesium和JS实现地点点聚合功能
670 0
|
存储 缓存 开发工具
初识Unity——unity的安装以及工程介绍(安装unity hub、版本选择、中文设置、安装编辑器、Assets文件、Library 文件、[ProjectName].sln 文件)
初识Unity——unity的安装以及工程介绍(安装unity hub、版本选择、中文设置、安装编辑器、Assets文件、Library 文件、[ProjectName].sln 文件)
2480 0