.Net Core - 是否在程序集加载时解决了依赖关系?
.Net Core - Are dependencies resolved on assembly loading?
想象一下,在您的库 A 中,您声明了对您永远不会使用的库 B 的依赖项。
如果您尝试动态加载 A 而 B 不在身边,您的应用程序会崩溃吗?或者,只要您调用的方法不尝试访问 B 上的代码,您就安全了?
这取决于你的意思"never use."
- 用于编译库 A 的代码从不使用库 B 定义的任何 API。
- 库 A 中的代码使用库 B 定义的 API,但是使用 API 的代码路径在运行时永远不会被调用。
在情况 1 中,编译器在生成 libraryA.dll 时将 trim 未使用的引用。您不需要 libraryB.dll 并且运行时不会尝试加载它。
在情况 2 中,您可能没问题,但不能保证。例如,如果您有一个引用库 B 的 class,即使该引用来自您从未调用的方法,运行时仍可能尝试加载 libraryB.dll。有时您可以巧妙地构建代码来避免这种负载,但这是在玩火。最好有 libraryB 可用。
想象一下,在您的库 A 中,您声明了对您永远不会使用的库 B 的依赖项。
如果您尝试动态加载 A 而 B 不在身边,您的应用程序会崩溃吗?或者,只要您调用的方法不尝试访问 B 上的代码,您就安全了?
这取决于你的意思"never use."
- 用于编译库 A 的代码从不使用库 B 定义的任何 API。
- 库 A 中的代码使用库 B 定义的 API,但是使用 API 的代码路径在运行时永远不会被调用。
在情况 1 中,编译器在生成 libraryA.dll 时将 trim 未使用的引用。您不需要 libraryB.dll 并且运行时不会尝试加载它。
在情况 2 中,您可能没问题,但不能保证。例如,如果您有一个引用库 B 的 class,即使该引用来自您从未调用的方法,运行时仍可能尝试加载 libraryB.dll。有时您可以巧妙地构建代码来避免这种负载,但这是在玩火。最好有 libraryB 可用。