C# 何时需要提供从属DLL?

C# 何时需要提供从属DLL?,c#,.net,dependencies,C#,.net,Dependencies,如果我有一个程序集,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实例,那么我认为我的应用程

如果我有一个程序集,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中的类型。谢谢。这就是我的想法,但我看到了奇怪的行为,似乎与此不符。我想我们已经找到了一个导致加载所有依赖项的
程序集.ExportedTypes
调用。