加载.DLL文件并从类中访问方法?

时间:2009-07-06 16:03:01

标签: c# dll

我在这样的图书馆中加载我是全新的,但这就是我的立场:

我有一个自制的DLL文件,它就像它获得的一样简单,类本身和方法。在加载此库的主程序中,我有:

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

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

我从这里做什么?我究竟如何加载课程&它内的方法?

感谢。

3 个答案:

答案 0 :(得分:33)

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

然后,您可以使用Activator.CreateInstance(type)使用无参数构造函数创建该类型的实例,或者使用Type.GetConstructors获取构造函数并调用它们来创建实例。

同样,您可以使用Type.GetMethods()等方法获取方法。

基本上,一旦你有了类型,你可以做很多事情 - 请查看member list以获取更多信息。如果你因为尝试执行某项特定任务而陷入困境(仿制药可能会很棘手),只要问一个具体的问题,我相信我们能够提供帮助。

答案 1 :(得分:12)

如果您知道类型,这就是如何获取课程的。

Assembly assembly = Assembly.LoadFrom("C:\\dll\\test.dll");

// Load the object
string fullTypeName = "MyNamespace.YourType";

YourType myType = assembly.CreateInstance(fullTypeName);

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

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

答案 2 :(得分:3)

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

检查here以获取基本建议。

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

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

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

相关问题