gpt4 book ai didi

c#-4.0 - 为什么我必须在客户端代码中引用 ExceptionHandling.Logging dll?

转载 作者:行者123 更新时间:2023-12-05 00:04:52 25 4
gpt4 key购买 nike

我有一个编译成 dll 的数据访问层。在这一层中,我使用 Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.Logging.dll 记录异常,然后将它们返回给调用者。

我有一个引用数据访问层 dll 但不直接调用 Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.Logging.dll 的客户端应用程序。当数据访问层中发生异常时,我的客户端代码中会出现以下运行时异常,除非我从客户端应用程序中添加对 Enterprise Library dll 的引用。

无法解析类型“Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.Logging.LoggingExceptionHandler、Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.Logging、Version=5.0.414.0、Culture=neutral、PublicKeyToken=31bf3856ad364e35”。请验证拼写是否正确或提供了完整的类型名称。

我不明白为什么客户端需要引用企业库 dll,即使它没有在代码中引用它。

任何想法将不胜感激。

最佳答案

这都是 CLR 在运行时定位和绑定(bind)到您的程序集的问题。

由于您的客户端直接调用您的 DAL.dll,因此它需要在编译时引用 DAL.dll。同样,由于您的 DAL.dll 直接调用 EL.Logging.dll 它需要在编译时引用 EL.Logging.dll。

但是,由于 Client 不直接依赖于 EL.Logging.dll,它不需要引用来编译。也就是说,在运行时,CLR 将不得不定位并绑定(bind)到所有 3 个程序集:Client、DAL.dll 和 EL.Logging.dll。

您不需要添加对 compile 的引用,但是通过将 Copy Local 标志设置为 true 来执行此操作,您将 EL.Logging.dll 部署到 Client 文件夹。现在在运行时所有的 DLL 都是可定位的。

其他达到相同效果的方法是:

  • 在 GAC 中注册企业库
  • 创建构建后操作
  • 手动执行所需 DLL 的 XCopy 部署
  • 指定 <codebase>在配置中定位组件
  • 使用<probing>在配置中探测子目录(可能对你没用)
  • 关于c#-4.0 - 为什么我必须在客户端代码中引用 ExceptionHandling.Logging dll?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5236817/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com