DLL延迟加载

4

我有一个复杂的.NET类库,它依赖于其他几个.NET类库,但并不是所有情况下都会使用它们。有没有办法将它们标记为“延迟加载”,这样如果我知道它根本没有被使用,就可以从文件夹中删除它?


3
通常情况下,程序集会被懒加载,但你似乎需要确保这一点。好问题! - usr
1个回答

6

所有程序集都是按需加载的。如果您从文件夹中删除一个程序集,该应用程序将继续工作,直到需要加载该程序集的时候。


1
但是,“需要情况”到底是在什么时候发生的呢?也许它是在代码第一次执行之前。 - usr
1
通常情况下,当程序集中的某个类型需要被加载时,就会出现需求情况。是的,这种情况发生在代码实际执行之前。(我几乎可以确定的是,在方法运行之前,必须加载该方法引用的所有类型 - 例如,如果您放置一个方法 object GetIfAvailable(bool isAvailable) { if (isAvailable) return new Unavailable(); } - 如果找不到 Unavailable 类型,即使它实际上没有被使用,通过使用 false 参数调用它,该方法也不会运行。) - Jean Hominal
@JeanHominal,好答案。我测试了一下,它确实像你描述的那样工作。这种行为正是我所需要的。谢谢。 - Denis
让我们希望它真的是那么简单。如果不是,原帖作者的应用程序将在程序的随机点中断。 - usr
1
为了澄清这个答案,延迟加载是在方法级别上完成的(而不是类或更低级别)。如果您使用Try/Catch进行检测,则必须将其放置在导致加载的方法调用周围,而不是在方法本身内部。 - Garr Godfrey
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接