C#如何动态加载多个相关dll
加载一个dll:
Assembly dllAmy = Assembly.LoadFile(dllPath);
Assembly.LoadFile(referDllPath);
classType = dllAmy.GetType(className);
method = classType.GetMethod(methodName);
classObj = dllAmy.CreateInstance(className);
string result = (string)method.Invoke(classObj, null);
但是现在这个method中会调用另外一个otherDll,我不知道如何加载进去?
请求帮助! C#如何动态加载多个相关dll --------------------编程问答-------------------- 看这个行不行
动态调用DLL时不能加载依赖的程序集
http://www.cnblogs.com/feiyun0112/archive/2009/07/03/1516512.html
*****************************************************************************
http://feiyun0112.cnblogs.com/ --------------------编程问答--------------------
谢谢,有没有一开始就可以加载多个dll的方法? --------------------编程问答-------------------- 使用AggregateCatalog类,具体参考下帖子:http://social.msdn.microsoft.com/Forums/zh-CN/b26b35ae-ca68-482e-afc9-de2bc10f04e4/mef-directorycatalog?forum=visualcshartzhchs --------------------编程问答--------------------
首先,谢谢,你发的链接我看过了,感觉MEF是做插件的,和我这个需求不太符合,而且我也不会使用MEF,我觉得应该有个方法可以加载多个DLL。 --------------------编程问答-------------------- 可以啊,你全部Load进来再调用就可以。我就这么用过的。 --------------------编程问答-------------------- 试试Assembly.LoadFrom --------------------编程问答-------------------- Assembly.LoadFrom可以自动加载依赖项 --------------------编程问答--------------------
先谢谢三位回复,我测试的代码如下:
1、DynmicLoadDLLReferLib项目下:NumberTool.cs有方法GetNumber():
public class NumberTool
{
public string GetNumber(int number)
{
return string.Format("GetNumber:{0}", number);
}
}
2、DynmicLoadDLLLib项目中TimeTool.cs调用NumberTool.GetNumber()方法:
public class TimeTool
{
public string GetNowTime()
{
return string.Format("GetNowTime():{0}, Invoke DynmicLoadDLLReferLib.NumberTool.GetNumber({1}):{2}",
DateTime.Now.ToString("HH:mm:ss:FFF"),
1, new NumberTool().GetNumber(1));
}
}
3、我的测试代码:
public static void LoadDLL()
{
string dllPath = @"E:\DynmicLoadDLLLib\bin\Debug\DynmicLoadDLLLib.dll";
string referDllPath = @"E:\DynmicLoadDLLReferLib\bin\Debug\DynmicLoadDLLReferLib.dll";
string className = "DynmicLoadDLLLib.TimeTool"; //类的完全限定名称:必须使用名称空间+类名称
string methodName = "GetNowTime"; //方法的名称
string parameClassName = "";
Type classType;
MethodInfo method;
Object classObj;
Assembly dllAmy;
string result;
try
{
//第一种方法LoadFile,把需要的全部load出来
//AppDomain domain = AppDomain.CreateDomain("_tempAppDomain");
dllAmy = Assembly.LoadFile(dllPath);
Assembly.LoadFile(referDllPath);
classType = dllAmy.GetType(className);
method = classType.GetMethod(methodName);
classObj = dllAmy.CreateInstance(className);//必须使用名称空间+类名称
result = (string)method.Invoke(classObj, null); //实例方法的调用
}
catch (Exception ex)
{
//throw ex;
}
//第二种方法LoadFrom
dllAmy = Assembly.LoadFrom(dllPath);
//Assembly.LoadFile(referDllPath);
classType = dllAmy.GetType(className);
method = classType.GetMethod(methodName);
classObj = dllAmy.CreateInstance(className);//必须使用名称空间+类名称
result = (string)method.Invoke(classObj, null); //实例方法的调用
}
4、结果
上面两个操作均报异常:未能加载文件或程序集“DynmicLoadDLLReferLib, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null”或它的某一个依赖项。系统找不到指定的文件。
5、结论
两种方法都不靠谱。。。
补充:.NET技术 , C#