博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
用Fusion Log诊断"Could not load file or assembly"问题
阅读量:6542 次
发布时间:2019-06-24

本文共 2373 字,大约阅读时间需要 7 分钟。

今天遇到一个奇怪问题,有一个ASP.NET项目,访问时总是显示不能加载EF4.1的错误(项目中对EF的引用都已升级至EF5.0):

Could not load file or assembly 'EntityFramework, Version=4.1.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)
说明: 执行当前 Web 请求期间,出现未经处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。
异常详细信息: System.IO.FileLoadException: Could not load file or assembly 'EntityFramework, Version=4.1.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)
源错误:
执行当前 Web 请求期间生成了未经处理的异常。可以使用下面的异常堆栈跟踪信息确定有关异常原因和发生位置的信息。
程序集加载跟踪: 下列信息有助于确定程序集“EntityFramework, Version=4.1.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089”未能加载的原因。
WRN: Assembly binding logging is turned OFF.
To enable assembly bind failure logging, set the registry value [HKLM\Software\Microsoft\Fusion!EnableLog] (DWORD) to 1.
Note: There is some performance penalty associated with assembly bind failure logging.
To turn this feature off, remove the registry value [HKLM\Software\Microsoft\Fusion!EnableLog].

问题怪就怪在我找遍整个项目的代码,也没找到哪个地方引用了Entity Framework 4.1.0.0。

后来,注意到错误信息中的提示——“dTo enable assembly bind failure logging, set the registry value [HKLM\Software\Microsoft\Fusion!EnableLog] (DWORD) to 1”,想到是不是可以通过日志找出究竟哪个地方引用了EF 4.1。进入注册表一看,有HKLM\Software\Microsoft\Fusion,但没有HKLM\Software\Microsoft\Fusion!EnableLog。不知该如何下手?

在网上搜了搜,在stackoverflow上发现的回答:

Add the following values to
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion
Add:
DWORD ForceLog set value to 1
DWORD LogFailures set value to 1
DWORD LogResourceBinds set value to 1
String LogPath set value to folder for logs ie) C:\FusionLog\

于是在注册表进行了这样的设置:

然后再访问,在页面显示的错误信息中包含了下面一行:

Calling assembly : Devtalk.EF.CodeFirst, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null.

在C:\FusionLog\Default\64baea7c中也可以找到对应的日志文件EntityFramework, Version=4.1.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089.HTM

于是,真相大白——这个项目中引用了Devtalk.EF.CodeFirst.dll,而它引用了Entity Framework 4.1,从而引起这个问题。

更新:

如果不想生成日志文件,只想在错误信息中显示“Calling assembly”,只需要在注册表HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion中将LogResourceBinds的值设置为1(DWORD(32-bit))。

注:修改注册表之后需要重启IIS才能生效

转载于:https://www.cnblogs.com/dudu/archive/2013/02/08/2909464.html

你可能感兴趣的文章
Bootstrap vs Foundation如何选择靠谱前端框架
查看>>
与、或、异或、取反、左移和右移
查看>>
vue常用的指令
查看>>
matlab练习程序(随机游走图像)
查看>>
Linux命令行下运行java.class文件
查看>>
input文本框实现宽度自适应代码实例
查看>>
protocol buffers的编码原理
查看>>
行为型设计模式之命令模式(Command)
查看>>
减少死锁的几个常用方法
查看>>
HDFS 核心原理
查看>>
正确配置jstl的maven依赖,jar包冲突的问题终于解决啦
查看>>
利用KMP算法解决串的模式匹配问题(c++) -- 数据结构
查看>>
登录内网账号后,连接不上内网网址
查看>>
安装 MariaDB
查看>>
【deep learning学习笔记】注释yusugomori的DA代码 --- dA.h
查看>>
纯手工打造漂亮的垂直时间轴,使用最简单的HTML+CSS+JQUERY完成100个版本更新记录的华丽转身!...
查看>>
java 为啥变量名前要加个m?
查看>>
探索Android中的Parcel机制(上)
查看>>
c++ 类型定义
查看>>
C#开发微信门户及应用(5)--用户分组信息管理
查看>>