110,549
社区成员
发帖
与我相关
我的任务
分享
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);
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、结论
两种方法都不靠谱。。。