.Net Core - 是否在装配加载时解决了依赖关系?

时间:2017-09-20 17:33:31

标签: c# .net-core .net-assembly

想象一下,在您的库A中,您声明了对库B的依赖,您永远不会使用它。

如果您尝试动态加载A和B不在身边,您的应用程序会崩溃吗?或者,只要你打电话的方法没有尝试在B上找到代码就可以了吗?

1 个答案:

答案 0 :(得分:3)

这取决于“永不使用”的含义。

  1. 用于编译库A的代码从不使用库B定义的任何API。
  2. 库A中的代码使用由库B定义的API,但在运行时从不调用使用该API的代码路径。
  3. 在第1种情况下,编译器会在生成libraryA.dll时修剪未使用的引用。您不需要libraryB.dll,运行时也不会尝试加载它。

    在案例2中,您可能没问题,但没有任何保证。例如,如果您有一个引用libraryB的类,即使该引用来自您从未调用的方法,运行时仍可能尝试加载libraryB.dll。你有时可以巧妙地构造代码以避免这种负担,但是你正在玩火。最好有libraryB可用。