C#中如何动态添加程序集查找目录
情况如下:
现有三个程序集Main.exe, One.dll, Two.dll。其中One.dll引用了Two.dll, 并且One.dll与Two.dll部署在一起, 而Main.exe单独部署。
在One.dll中有
using Two;
namespace One
{
public SomeType
{
public void DoSomething(){ AnotherType.Hello(); }
}
}
在Two.dll中有
namespace Two
{
public AnotherType
{
public static void Hello(){}
}
}
Main.exe运行时,首先将One.dll与Two.dll安装到某一路径下,之后动态加载One.dll并调用一个方法
...
var path = "某路径\One.dll";
var assembly = Assembly.LoadFile(path);
var type = assembly.GetType("One.SomeType");
var obj = Activator.CreateInstance(type);
var method = type.GetMethod("DoSomething", BindingFlags.Public | BindingFlags.Instance);
if (method != null)
{
method.Invoke(obj, null);
}
...
现在问题是Main.exe在动态调用SomeType.DoSomething()时无法加载One.dll所依赖的Two.dll,因为One.dll,Two.dll与Main.exe是分开部署的,而且One.dll与Two.dll所在的路径是在Main.exe运行时动态确定的(例如由用户选择)。
请问如何可以使Main.exe在运行时可以自动在One.dll的所在目录中查找并加载Two.dll?
回δCat:
但是One.dll和Two.dll是别人已经shipped的,是不可以改的。改动只能在Main.exe中……
回a31232710:
您有何高见说来听听撒,俺这儿等着呢……
123456qqq
浏览 881回答 3