我希望能够在运行时加载程序集,并能够在我的代码中使用它的所有类型。
我知道如何通过加载程序集来实例化对象:
assembly = Assembly.LoadFrom(@"C:\Users\c_desaik\Desktop\PowerTool.exe");
Type type = assembly.GetType("PowerTool.Automation");
powerTool = Activator.CreateInstance(type);
但这将允许我访问整个程序集的一个对象。但是,如果我想使用程序集中的其他成员(如枚举和其他静态类),那么我该怎么做呢?
如果我在编译时引用程序集,那么我应该可以像Assemblyname.membername那样做。但是因为我在运行时加载了这个。我怎么能这样做?
答案 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());