2016-06-28 52 views
2

如果我有一个程序集,1.dll的某些类型依赖于其他程序集中的类型2.dll和3.dll确定这些依赖程序集是否需要存在。我认为这是只有当我试图加载从其他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的类型的实例。

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

+0

如果您不需要调用或调用它,为什么要将它包含在项目中呢? –

+0

@jamesralston 1.dll提供了对服务中的组件进行引导的类型。其中一些组件涉及路由到特定服务,因此需要在许多其他需要路由到主服务的服务之间共享。路由类在2.dll中。 3.dll包含主要服务的类型。因此,主服务使用1.dll中的方法来引导3.dll中的主要服务类型以及2.dll中的路由组件。其他服务仅使用1.dll中的引导路由的方法,因此仅使用2.dll中的类型。 –

回答

1

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

摘自MSDN

当运行时尝试解析到另一个组件上的基准定位和结合到组装的过程开始。

您可以很好地理解运行时如何从该文章中找到程序集。有关它如何工作的一些证明,请查看this blog

+0

谢谢。这就是我的想法,但看到奇怪的行为,似乎与此不符。想想我们已经把它追踪到一个'Assembly.ExportedTypes'调用导致所有依赖被加载。 –