如何从应用程序的bin路径之外的位置使用其完整显示名称加载程序集?
通常可以使用
从自定义位置加载程序集Assembly.LoadFrom(path);
这样可行,但似乎要加载一个强命名的程序集,我需要指定其完整的显示名称,例如
Assembly myDll =
Assembly.Load("myDll, Version=1.0.0.1, Culture=neutral, PublicKeyToken=9b35aa32c18d4fb1");
但问题是这只会引用我的应用程序探测路径中的程序集。
那么,如果我有一个程序集dir1/asm.dll
和一个程序集dir2/asm.dll
并且两者都有一个强名称,那该怎么办呢。
如何在运行时加载它们?
答案 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副本)