"无法加载文件或程序集'Microsoft.Practices.EnterpriseLibrary.Validation"异常

Chr*_*ris 7 c# asp.net-mvc enterprise-library validation-application-bl

我在尝试使用企业库验证应用程序块时遇到以下异常:

创建用于验证的配置节处理程序时出错:无法加载文件或程序集"Microsoft.Practices.EnterpriseLibrary.Validation,Version = 4.1.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35"或其依赖项之一.定位的程序集的清单定义与程序集引用不匹配.(来自HRESULT的异常:0x80131040)(C:\ Documents and Settings\My Documents\Visual Studio 2008\Projects\Testers\TestProject\web.config第12行)

我知道异常试图告诉我什么,但我无法弄清楚如何解决它.我只安装了一个版本的企业库,这就是它(4.1.0.0),所以我看不出它是如何找到错误的版本,所以我想它是一个依赖问题.我已经从企业库4.1中包含了"Common","Validation"和"ObjectBuilder2"DLL作为项目中的参考,所以我不确定我还缺少什么.文档肯定似乎表明这就是我所需要的.

有没有办法找出依赖问题是什么?

如果有帮助,我尝试使用企业库配置工具创建验证应用程序块规则集,以验证实体框架实体中的数据.我在Visual Studio 2008中使用ASP.NET MVC.

感谢您提供的任何帮助/指导,

克里斯

dne*_*ome 5

打开Fusion日志记录,查看在运行时绑定的程序集.

Hanselman最近有一篇文章,应该有助于启用日志记录和检查输出.

http://www.hanselman.com/blog/CommentView.aspx?guid=3654c8f3-c5c3-4dee-a01f-c9a8da3ef2fa

要做的另一个重要区别是,添加到项目中的引用是编译时引用,并且不会影响代码在运行时绑定的方式,除非在使用强名称程序集时指定强名称.为了找出运行时发生的情况,您需要查看绑定日志.日志应显示运行时在查找程序集时所做的所有尝试.如果程序集与您的exectuable一起不在bin目录中,则很可能会查找GAC并找到它不期望的版本.

请注意,编译器在引用程序集时不会使用GAC.因此,很可能您在项目中使用的不同版本比在GAC中安装的版本更多.

此外,通过使用Windows资源管理器查看C:\ Windows\assembly,可以很容易地找到您在GAC中安装的版本.错误消息中指定的版本将是编译期间引用的版本.如果这些版本不匹配,那么这可能是您的问题,假设Fusion确实正在寻找GAC(通过查看Fusion日志可以看出这一点).