我在这样的图书馆中加载我是全新的,但这就是我的立场:
我有一个自制的DLL文件,它就像它获得的一样简单,类本身和方法。在加载此库的主程序中,我有:
Assembly testDLL = Assembly.LoadFile("C:\\dll\\test.dll");
从这里开始,我有点卡住了。据我所知,它正确加载它,因为当我更改名称时它会给我带来错误。
我从这里做什么?我究竟如何加载课程&它内的方法?
感谢。
答案 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答案是可行的。