在运行时加载程序集,以便我可以访问它的所有类型

时间:2013-08-23 02:38:53

标签: c# .net .net-assembly system.reflection

我希望能够在运行时加载程序集,并能够在我的代码中使用它的所有类型。

我知道如何通过加载程序集来实例化对象:  

assembly = Assembly.LoadFrom(@"C:\Users\c_desaik\Desktop\PowerTool.exe");

            Type type = assembly.GetType("PowerTool.Automation");
            powerTool = Activator.CreateInstance(type);  

但这将允许我访问整个程序集的一个对象。但是,如果我想使用程序集中的其他成员(如枚举和其他静态类),那么我该怎么做呢?

如果我在编译时引用程序集,那么我应该可以像Assemblyname.membername那样做。但是因为我在运行时加载了这个。我怎么能这样做?

1 个答案:

答案 0 :(得分:1)

如果您想要所有类型(包括私有类型),请使用Assembly.GetTypes()

assembly = Assembly.LoadFrom(@"C:\Users\c_desaik\Desktop\PowerTool.exe");

foreach(Type type in assembly.GetTypes())
    Console.WriteLine(type.ToString());

如果您只想使用 public 类型,请使用GetExportedTypes

foreach(Type type in assembly.GetExportedTypes())
    Console.WriteLine(type.ToString());