我定义了一个dll(ClassLibrary),它包含了ClassA类,在这个类中,我定义了public int Add(int a,intb)函数。我现在想在程序运行是加入ClassLibrary的引用,而不是在设计时加入引用。
如何处理?
我写的代码,编译出错,如下:
Assembly obj;
obj = System.Reflection.Assembly.Load("ClassLibrary.ClassA
");
int i = obj.Add(2,4);就这几行代码,出错了!!该如何动态引用dll啊?

解决方案 »

  1.   

    如下就可以了:
    string DllPath = Application.StartupPath + @"\someDLL.dll";
    System.Reflection.Assembly assmble = System.Reflection.Assembly.LoadFile(DllPath);Type tmpType = assmble.GetType("someDLL.ClassA");
    System.Reflection.MethodInfo tmpM = tmpType.GetMethod("Add");
    object tmpobj = assmble.CreateInstance("someDLL.ClassA");
    int i = (int)tmpM.Invoke(tmpobj, new object[]{2,3});----------ClassA的定义--------------------
    using System;namespace someDLL
    {
    /// <summary>
    /// ClassA 的摘要说明。
    /// </summary>
    public class ClassA
    {
    public ClassA()
    {
    //
    // TODO: 在此处添加构造函数逻辑
    //
    } public int Add(int a, int b)
    {
    return a+b;
    }
    }
    }
      

  2.   

    using System;
    using someDLL;Assembly obj;
    obj = System.Reflection.Assembly.Load("ClassLibrary.ClassA
    ");
    int i = obj.Add(2,4);
      

  3.   

    谢谢hbxtlhx(平民百姓) ,请斑竹结贴,
      

  4.   

    谢谢hbxtlhx(平民百姓) ,请斑竹结贴哈哈哈,楼主幽默啊
      

  5.   

    在hbxtlhx(平民百姓)的帮助下,实现了动态加载DLL,但现在有了一个新的问题,就是:我的主调运用程序是Web,不能string DllPath = "http://ip/xxx/bin" + @"\someDLL.dll";
    System.Reflection.Assembly assmble = System.Reflection.Assembly.LoadFile(DllPath);也就是说System.Reflection.Assembly.LoadFile方法,只能加载绝对路径的Dll,不能加载相对路径的DLL;当然,我的程序也可以将DLL放在一个固定的路径,如:c:/someDll.dll,但这影响了部署的灵活性。hbxtlhx(平民百姓),有何高招?