加载多个程序集
本文关键字:程序集 加载 | 更新日期: 2023-09-27 18:32:39
如何使用程序集的完整显示名称从应用程序 bin 路径之外的位置加载程序集?
通常可以从自定义位置加载程序集
Assembly.LoadFrom(path);
这有效,但似乎要加载强名称的程序集,我需要指定其完整的显示名称,例如
Assembly myDll =
Assembly.Load("myDll, Version=1.0.0.1, Culture=neutral, PublicKeyToken=9b35aa32c18d4fb1");
但这里的问题是,这仅引用我的应用程序的探测路径中的程序集。
那么,如果我有一个程序集dir1/asm.dll
和一个程序集dir2/asm.dll
并且两者都有一个强名称怎么办?
如何在运行时加载它们?
在运行时,可以通过以下方法指定加载程序集时要探测的其他目录:
AppDomain.CurrentDomain.ClearPrivatePath();
AppDomain.CurrentDomain.AppendPrivatePath();
如果在安装过程中已知子目录名称,则还可以在 app.config 文件的 <probing>
元素的 privatePath
属性中指定这些附加目录。
还要确保文件名正确。当你有
AppDomain.CurrentDomain.AppendPrivatePath("Subdir");
Assembly myDll = Assembly.Load("myDll, Version=1.0.0.1, Culture=neutral, PublicKeyToken=9b35aa32c18d4fb1");
然后.net将在可执行文件目录下的目录"Subdir"中查找名为"mydll.dll"的文件。
您可以通过 loadfile 从其位置加载任何程序集(此处的示例)
如果要采用程序集的多个版本,请考虑处理 AppDomain.CurrentDomain.AssemblySolve(此处的示例)
这些示例来自一个小型开源项目,该项目将从单独的"包"文件夹加载 DLL(允许包使用隔离加载程序拥有自己的依赖项副本)