前几天,在做本网站的时候,就是用到了此方法,有一个这符串,我要求要进行执行。所以用下面的方法可以实现,并支持调用另一个dll的方法
EXFCODE:
#region 根据字符执行方法
///
/// 根据字符执行方法
///
/// dll名称
/// 类名
/// 方法名
/// 参数
/// 返回object类型
public static object ExfExecute(string dllName, string className, string MethodName, params object[] parameters)
{
//动态从程序集中查找所需要的类并使用系统激活器创建实例最后获取它的Type
Assembly assembly;
if (Utils.StrIsNullOrEmpty(dllName))//判断dll是否为空
assembly = Assembly.GetCallingAssembly();//调用当前正执行的方法的Assembly
else
assembly = Assembly.LoadFile(HttpRuntime.BinDirectory + dllName + ".dll");//调用dll的Assembly
Type type = assembly.CreateInstance(className, true).GetType();
//定义参数的个数,顺序以及类型的存储空间;
Type[] parametersLength;
if (parameters != null)
{
//如果有参数创建参数存储空间并依次设置类型
parametersLength = new Type[parameters.Length];
int i = 0;
foreach (object obj in parameters)
{
parametersLength.SetValue(obj.GetType(), i);
i++;
}
}
else
{
//没有参数就为空
parametersLength = new Type[0];
}
//查找指定的方法
MethodInfo methodinfo = type.GetMethod(MethodName, parametersLength);
//如果是静态方法就执行
if (methodinfo.IsStatic)
{
//调用函数
return methodinfo.Invoke(null, parameters);
}
return null;
}
#endregion 使用方法
1、非其它dll的方法
ExfExecute(null,"命名空间.类名","方法名",参数1,参数2,参数n);2、dll的方法
ExfExecute("dll名称","命名空间.类名","方法名",参数1,参数2,参数n);第二种,一般我们dll都是生成在bin目录里。所以这里直接写dll的名称即可,如"abc.dll",只用写成"abc"即可。