加载多个程序集

时间:2016-01-31 01:12:17

标签: c# .net assemblies strongname

如何从应用程序的bin路径之外的位置使用其完整显示名称加载程序集?

通常可以使用

从自定义位置加载程序集
Assembly.LoadFrom(path);

这样可行,但似乎要加载一个强命名的程序集,我需要指定其完整的显示名称,例如

Assembly myDll =
Assembly.Load("myDll, Version=1.0.0.1, Culture=neutral, PublicKeyToken=9b35aa32c18d4fb1");

但问题是这只会引用我的应用程序探测路径中的程序集。

那么,如果我有一个程序集dir1/asm.dll和一个程序集dir2/asm.dll并且两者都有一个强名称,那该怎么办呢。

如何在运行时加载它们?

2 个答案:

答案 0 :(得分:1)

在运行时,您可以通过以下方法指定在加载程序集时要探测的其他目录:

    AppDomain.CurrentDomain.ClearPrivatePath();
    AppDomain.CurrentDomain.AppendPrivatePath();

如果在安装期间已知子目录名称,您还可以在privatePath元素的<probing>属性中的app.config文件中指定这些其他目录。

确保文件名正确无误。当你有

AppDomain.CurrentDomain.AppendPrivatePath("Subdir");

Assembly myDll = Assembly.Load("myDll, Version=1.0.0.1, Culture=neutral, PublicKeyToken=9b35aa32c18d4fb1");

然后.net将查找名为&#34; mydll.dll&#34;的文件。在目录&#34; Subdir&#34;在可执行文件的目录下面。

答案 1 :(得分:0)

您可以通过loadfile(example here

从其位置加载任何程序集

如果你想采用多个版本的程序集考虑处理AppDomain.CurrentDomain.AssemblyResolve(example here

这些例子来自一个小型的开源项目,该项目将从一个单独的包装中加载dll&#34;文件夹(允许包使用隔离的加载程序拥有自己的dependency副本)