可能重复:
CLR 如何加载 DLL?
在 .NET 中是否在运行时按需加载引用的 DLL?或者它们都是一开始就加载的。我之所以问,是因为在附加 Visual Studio 的情况下运行我的项目时,我注意到它正在为开始时引用的每个 DLL 加载符号。
这仅仅是因为我在附加了 VS 的情况下在调试中运行吗?
可能重复:
CLR 如何加载 DLL?
在 .NET 中是否在运行时按需加载引用的 DLL?或者它们都是一开始就加载的。我之所以问,是因为在附加 Visual Studio 的情况下运行我的项目时,我注意到它正在为开始时引用的每个 DLL 加载符号。
这仅仅是因为我在附加了 VS 的情况下在调试中运行吗?
您可以在没有附加 VS 的情况下运行时使用 Procmon(进程监视器)检查自己。在我脑海中,我记得当 JIT 编译器第一次遇到一个类型时,它们是按需加载的。事实上,我使用混合解决方案(托管和非托管程序集),当缺少非托管 dll 时,当第一次需要来自该程序集的类型时会出现错误;在 VS 上运行时,我什至得到了调用堆栈。但是我从来没有在VS之外检查过。至于背后的理论,这个问题有很长的解释。