Assembly assembly = Assembly.LoadFrom(@"..\..\..\Common\bin\Debug\Common.dll");
Type t = assembly.GetType("Common.ForPrivate");
MethodInfo method = t.GetMethod("Find", BindingFlags.NonPublic | BindingFlags.Instance);
object obj = Activator.CreateInstance(t);
obj result = method.Invoke(obj, new object[] { });
Assembly assembly = Assembly.LoadFrom(@"..\..\..\Common\bin\Debug\Common.dll");
Type t = assembly.GetType("..");
这两行,获取没加入引用类的dll,当然也可以是.exe文件。 这里有多少个..\, 则是当前目录往上推多少个父目录。
自然,如果你在当前项目中加入了目标类的引用,可以直接用Type t=typeof(ForPrivate);
Type t = assembly.GetType("Common.ForPrivate");
这一行,函数里的字符串,前面必须加上命名空间。
MethodInfo method = t.GetMethod("Find", BindingFlags.NonPublic | BindingFlags.Instance);
这里的NonPublic 和Instance两个标志位必须同时加上,否则将得不到对应的私有函数。
object obj=Activator.CreateInstance(t);
也可以用用这句代替:
object obj = assembly.CreateInstance("Common.ForPrivate");
最后,object re = method.Invoke(obj, null)
如果调用的函数有返回值,则前面一定要有一个object类型来接受它,否则将有异常。