【问题标题】:When are dependent dlls required to be present?何时需要存在依赖 dll?
【发布时间】:2016-06-29 02:34:10
【问题描述】:

如果我有一个程序集,则 1.dll 有一些类型依赖于其他程序集 2.dll 和 3.dll 中的类型,它们决定了这些依赖程序集是否需要存在。我以为只有当我尝试从 1.dll 加载一个引用其他 dll 的类型的类型时。

例如。如果我有一个来自 1.dll 的类 A1 并且它有一个带有 A2 类型参数的方法(来自 2.dll),我尝试创建一个 A1 的实例,那么显然我需要2.dll要存在于bin中以创建A1的实例。

如果我有另一个类型 B1 (1.dll) 取决于 A3 (3.dll) 但我尝试创建一个 B1 实例然后我想即使 3.dll 不存在,我的应用程序也应该运行良好,因为我没有尝试创建任何需要来自 3.dll 的类型的事物的实例。

这是正确的吗?要求存在依赖项的规则是什么?

【问题讨论】:

  • 如果你不需要调用或调用它,你为什么要把它包含在项目中?
  • @jamesralston 1.dll 提供了对服务中的组件进行引导的类型。其中一些组件处理到特定服务的路由,因此在需要路由到主服务的许多其他服务之间共享。路由类在 2.dll 中。 3.dll 包含主要服务的类型。所以主服务使用 1.dll 中的方法来引导 3.dll 中的主服务类型和 2.dll 中的路由组件。其他服务仅使用 1.dll 中引导路由的方法,因此仅使用 2.dll 中的类型。

标签: c# .net dependencies


【解决方案1】:

依赖关系是在运行时确定的,所以是的,你是对的。如果您引用一个从未使用过的程序集,您的应用程序可以正常运行。

摘自MSDN

当运行时尝试解析对另一个程序集的引用时,定位和绑定到程序集的过程就开始了。

您可以从那篇文章中很好地了解运行时如何定位程序集。有关其工作原理的一些证明,请查看this blog

【讨论】:

  • 谢谢。这就是我的想法,但看到的奇怪行为似乎与此不一致。认为我们已将其追踪到导致所有依赖项加载的 Assembly.ExportedTypes 调用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-13
  • 1970-01-01
相关资源
最近更新 更多