加载.DLL文件并从类中访问方法?
我在这样的图书馆加载是完全新的,但这就是我的立场:
我有一个自制的DLL文件,它就像它获得的一样简单,类本身和方法。 在加载此库的主程序中,我有:
Assembly testDLL = Assembly.LoadFile("C:\\dll\\test.dll");
从这里开始,我有点卡住了。 据我所知,它正确加载它,因为它在我更改名称时给出了错误。
我该怎么办? 我究竟如何加载其中的类和方法?
谢谢。
使用Assembly.GetTypes()
获取所有类型的集合,或使用Assembly.GetType(name)
获取特定类型。
然后,您可以使用Activator.CreateInstance(type)
使用无参数构造函数创建该类型的实例,或者使用Type.GetConstructors
获取构造函数并调用它们来创建实例。
同样,您可以使用Type.GetMethods()
等获取方法。
基本上,一旦你有了类型,你可以做很多事情 – 查看成员列表以获取更多信息。 如果您在尝试执行特定任务时遇到困难(仿制药可能很棘手),只需询问一个特定问题,我相信我们能够提供帮助。
如果你知道类型,这就是你如何获得类。
Assembly assembly = Assembly.LoadFrom("C:\\dll\\test.dll"); // Load the object string fullTypeName = "MyNamespace.YourType"; YourType myType = assembly.CreateInstance(fullTypeName);
完整的类型名称很重要。 由于您没有添加.dll,因此您无法进行使用,因为它不在您的项目中。
如果你想要所有我只会Jon Skeet回答。
如果要动态加载程序集,然后从其中的类调用方法,则需要执行某种forms的动态调用。
点击这里获取基本建议。
唯一缺少的是如何获取类型本身,可以通过这样的代码轻松检索:
foreach (Type t in assemblyToScan.GetTypes()) { if(condition) //do stuff }
如果你只是想静态地使用程序集(通过在编译时使用程序集),那么这个页面上的Launcy的答案是要走的路。