C# Assembly.Load() 方法加载了错误的 dll?

C# Assembly.Load() method loads the wrong dll?

问题陈述

我在加载 dll 时在 C# 中实现了某种卷影复制,以防止 dll 文件被锁定。它的工作原理如下:

  1. 说我有 sample.dll 并且想将它加载到应用程序域而不锁定它
  2. 首先,我在同一目录中复制了一个名为 sample_shadow.dll 的程序集
  3. 然后我用Assembly.Load加载sample_shadow.dll(Assembly.LoadFrom和AssemblyName.GetAssemblyName也试过了)
  4. 在那之后,加载的程序集似乎具有 sample.dll 而不是 sample_shadow.dll 的基本位置,并且 sample.dll 被锁定

约束条件

我知道我可以使用 Assembly.Load(byte[]) 或 Assembly.LoadFile() 来实现这一点。但是不能用(至少我没弄明白怎么用),因为比较复杂的情况:

问题

  1. 我想知道如何才能正确加载 sample_shadow.dll 从而防止 sample.dll 被锁定
  2. 如果有人能详细说明一下后台的机制,我将不胜感激

提前致谢!

您需要 LoadFile - LoadFrom 从 URI 获取程序集信息,然后加载已知程序集。此类用例明确存在 LoadFile。

“使用 LoadFile 方法加载和检查具有相同标识但位于不同路径中的程序集”