现在的情况是:
我有一个名为Lib1.dll的程序集。由于某些原因(与问题无关),我不得不将程序集文件名更改为Lib1New.dll,现在在使用Assembly.LoadFile加载重命名的程序集时,我注意到CLR也会尝试加载Lib1.dll。
如果在搜索路径中找到了Lib1.dll,则会将其加载到地址空间中。无论是否找到了Lib1.dll,应用程序都可以正常工作。(问题在于,如果找到了Lib1.dll,则该文件会被锁定,其他进程无法删除它)。
我不明白为什么LoadFile会搜索并加载Lib1.dll。LoadFile应该在指定位置加载程序集文件的内容,为什么要搜索文件。
LoadFile的MSDN文档:
使用LoadFile方法加载和检查具有相同标识但位于不同路径上的程序集。 LoadFile不会将文件加载到LoadFrom上下文中,并且不会像LoadFrom方法一样使用加载路径来解析依赖项。 LoadFile在此限制场景中非常有用,因为无法使用LoadFrom加载具有相同标识但不同路径的程序集;它只会加载第一个这样的程序集。