删除引用时应该怎么办?

时间:2010-03-12 17:00:25

标签: .net vb.net dll reference

我有一个引用dll的vb.net 3.5应用程序(abc.dll,也在.net 3.5中) 应用程序不时访问此dll。如果在执行期间的任何时候,如果我删除了dll,我希望应用程序在下次尝试使用dll中的类时抛出错误。但是,这不是我看到的行为。如果我在启动之前删除了dll,应用程序会在启动时抛出错误。但不是在启动后删除dll的时候。

这是标准行为,还是我做错了什么? 如果在尝试使用其类时未找到dll,是否可以让应用程序抛出错误?

提前致谢。

2 个答案:

答案 0 :(得分:3)

简短的回答没有。加载DLL后,它将被加载,直到使用该DLL的app AppDomain实例从进程中卸载。只有这样才能删除原始DLL。

更长的答案:

这是一个复杂的问题,因为它取决于DLL如何加载到进程中。有几种不同的方式可以发生

  • 直接加载磁盘。这个我知道的最少,但在这种情况下,CLR可能会对程序集进行文件锁定,因此它应该能够被删除
  • 从影子目录加载。在这种情况下,DLL实际上是从磁盘上的不同目录加载的,以允许执行诸如删除原始DLL之类的操作。这在Web应用程序方案中很流行。在这种情况下,删除原始DLL是没有意义的,因为重要的DLL是从sort.s的临时目录加载的。

答案 1 :(得分:0)

错误总是在.NET框架尝试加载您引用的程序集时发生。所以看起来由于某种原因CLR决定在你的应用程序的启动时加载程序集。