代码之家  ›  专栏  ›  技术社区  ›  scrot

加载a。DLL文件和类中的访问方法?

  •  26
  • scrot  · 技术社区  · 17 年前

    我完全不习惯在这样的库中加载,但我的立场是:

    我有一个自制的DLL文件,它非常简单,包括类本身和方法。在加载此库的主程序中,我有:

    Assembly testDLL = Assembly.LoadFile("C:\\dll\\test.dll");
    

    从这里开始,我有点卡住了。据我所知,它正确加载了它,因为当我更改名称时,它会给我错误。

    谢谢。

    3 回复  |  直到 10 年前
        1
  •  33
  •   Jon Skeet    17 年前

    使用 Assembly.GetTypes() 获取所有类型的集合,或 Assembly.GetType(name)

    Activator.CreateInstance(type) 或者让构造函数使用 Type.GetConstructors 并调用它们来创建实例。

    同样,您可以通过以下方式获得方法 Type.GetMethods() 等等

    基本上,一旦你有了一个类型,你就可以做很多事情——看看 member list 了解更多信息。如果你在执行特定任务时遇到困难(泛型可能很棘手),只需问一个具体的问题,我相信我们会提供帮助。

        2
  •  12
  •   David Basarab    17 年前

    如果你知道类型,这就是你如何获得课程的方法。

    Assembly assembly = Assembly.LoadFrom("C:\\dll\\test.dll");
    
    // Load the object
    string fullTypeName = "MyNamespace.YourType";
    
    YourType myType = assembly.CreateInstance(fullTypeName);
    

    完整的类型名称很重要。由于您没有添加.dll,因此无法进行使用,因为它不在您的项目中。

    如果你想要全部,我只想Jon Skeet回答。

        3
  •  3
  •   Fabrício Matté    17 年前

    如果你想 加载一个程序集,然后从其中的类调用方法,您需要执行某种形式的动态调用。

    检查 here 关于这方面的基本建议。

    唯一缺少的是如何获取类型本身,可以用这样的代码轻松检索:

    foreach (Type t in assemblyToScan.GetTypes())
            {
                if(condition)
                    //do stuff
            }
    

    如果你只是想静态地使用程序集(通过在编译时提供程序集),那么本页Launcy的答案就是可行的。