无法加载文件或程序集“Microsoft.Practices.EnterpriseLibrary.Validation”的异常。

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),因此我不明白它怎么会找到错误的版本,所以我认为这是一个依赖性问题。我已经将企业库 4.1 中的“Common”、“Validation”和“ObjectBuilder2” DLL作为项目的引用包含在内,所以我不确定我还缺少什么。文档似乎表明这是我需要的全部内容。

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

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

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

Chris

1个回答

5

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

Hanselman最近发布的文章应该有助于启用日志记录并检查输出。

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

另一个重要的区别是,添加到项目中的引用是编译时引用,除了指定强名称(如果使用了强命名程序集)之外,并不影响代码在运行时绑定的方式。为了找出运行时发生的情况,您需要查看绑定日志。日志应该显示运行时尝试定位程序集的所有尝试。如果程序集不在与可执行文件一起的 bin 目录中,它很可能正在 GAC 中查找并找到一个意外的版本。
请注意,编译器在引用程序集时不使用 GAC。因此,在项目中使用的引用版本与您在 GAC 中安装的版本可能不同。
此外,通过使用 Windows Explorer 查看 C:\Windows\assembly,可以很容易地找出您在 GAC 中安装的版本。在您的错误消息中指定的版本将是编译期间引用的版本。如果这些版本不匹配,那么这可能是您的问题,假设 Fusion 确实在查找 GAC(通过查看 Fusion 日志可见)。

谢谢指点。我最终意识到,由于我引用的方式,它会拉取默认版本的DLL而不是更新的版本。我愚蠢地认为我必须自己构建DLL,而不是使用包中预构建的二进制文件,因此标记显然与我设置的标记不匹配。我解决了Enterprise Library的安装问题,所以它正在使用Microsoft构建的DLL,并且一切都很顺利。不过,我会研究一下使用Fusion,因为听起来它可以帮助我更快地跟踪这个问题。谢谢! - Chris

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接