7

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

创建用于验证的配置节处理程序时出错:无法加载文件或程序集“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),所以我看不出它如何找到错误的版本,所以我想这是一个依赖问题。我已将 Enterprise Library 4.1 中的“Common”、“Validation”和“ObjectBuilder2”DLL 作为项目中的引用包含在内,所以我不确定我还缺少什么。文档当然似乎表明这就是我所需要的。

有没有办法追踪依赖问题是什么?

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

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

克里斯

4

1 回答 1

5

打开 Fusion 日志记录并查看运行时绑定的程序集。

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

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

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

请注意,编译器在引用程序集时不使用 GAC。因此,很可能您在项目中用作参考的版本与您在 GAC 中安装的版本不同。

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

于 2010-01-04T20:12:15.910 回答