Assembly.LoadFrom
使用和混合加载程序集时的奇怪行为Assembly.Load
:
Assembly.LoadFrom
我在加载程序集时遇到了一个奇怪的行为Assembly.Load
。我正在使用 加载程序集Assembly.LoadFrom
,其中程序集位于一个文件夹中,该文件夹不是执行文件夹。
稍后在我的测试代码中,当我尝试使用 再次加载此程序集时Assembly.Load
,尽管程序集已加载,但加载失败并显示System.IO.FileNotFoundException
(“无法加载文件或程序集...”)。使用强名称和非强名称加载都失败(再次加载此程序集的最初原因是使用 a BinaryFormatter
)。
但是,如果程序集位于执行文件夹中,则以后的加载在两种情况下都会成功,使用强名称和非强名称。在这种情况下,您可以看到从两个不同的位置加载了两个相同的程序集。
重现此问题的简单代码示例:
Assembly assembly1 = Assembly.LoadFrom(@"C:\a.dll");
// Loading with a strong-name fails
Assembly assembly2 = Assembly.Load(@"a, Version=1.0.0.0, Culture=neutral, PublicKeyToken=14986c3f172d1c2c");
// Also loading with a non-strong fails
Assembly assembly3 = Assembly.Load(@"a");
- 任何解释为什么 CLR 忽略已加载的程序集?
- 知道如何缓解这个问题吗?