本帖最后由 eirouna 于 2012-10-15 13:55:28 编辑

解决方案 »

  1.   


    我写的反射Assembly Asm = Assembly.Load("CheckRun");//CheckRun是写好的exe
    Type type = Asm.GetType("ControlE");//ControlE是我写CheckRun中的一个接口
    object AssClas = Activator.CreateInstance(type);
    MethodInfo method = type.GetMethod("button");//button是要调用的方法
    BindingFlags flag = BindingFlags.Public | BindingFlags.Instance;
    object[] parameters = new object[] { };
    object returnValue = method.Invoke(AssClas, flag, Type.DefaultBinder, parameters, null);
    但是报错“值不能为空。参数名: type”,是在object AssClas = Activator.CreateInstance(type);的时候报的错。
    另外关于路径,如果CheckRun放在同一路径是可以的,但我做好后的路径应该不在一起,该怎么写?
      

  2.   

    如果写成Type type = Asm.GetType("CheckRun.ControlE");//CheckRun为命名空间
    则会报错“无法创建接口的实例。”
      

  3.   

    Assembly.Load()的参数具体到你的exe路径
    Asm.GetType()的参数具体到类名,不能用接口
      

  4.   

    if (type.GetInterface(typeof(接口).FullName) != null)这个可以判断你的类是否实现这个接口,如果是接口 i = (接口)assembly.CreateInstance(type.FullName,true);
      

  5.   


    Assembly.Load()的参数具体到你的exe路径会报错“未能加载文件或程序集“D:\\WebService1\\CheckRun”或它的某一个依赖项。给定程序集名称或基本代码无效。 (异常来自 HRESULT:0x80131047)”
    即使写CheckRun.exe也同样报错“未能加载文件或程序集“D:\\WebService1\\CheckRun.exe”或它的某一个依赖项。给定程序集名称或基本代码无效。 (异常来自 HRESULT:0x80131047)”
      

  6.   


    如果用Assembly.LoadFile()的话就会发现重复加载,因为那个程序本来是开着的。
      

  7.   

    感谢ershou007的帮助,虽然最后不是用这个方法写的。