如何从引用的程序集中获取类型?

时间:2010-08-08 10:47:54

标签: .net reflection

我想从引用的(它是项目引用)程序集中访问类型信息。困难的方法是使用VS解决方案解析程序集的文件路径,并从文件加载程序集,但我确信由于引用的程序集已在执行程序集中解析/加载,因此必须有一个更简单的方法,但那种方式真的逃脱了我。我怎么能这样做?

例如,在我的MainAssembly中,我引用了LibAssembly。现在,在MainAssembly中的代码中,我需要迭代LibAssembly中定义的类型的成员。

2 个答案:

答案 0 :(得分:3)

我知道最简单的方法就是使用反射。如果在LibAssembly中定义了一个名为MyClass的类,则可以从主程序集中调用以下代码:

Type[] types = Assembly.GetAssembly(typeof(MyClass)).GetTypes();

这将为您提供LibAssembly中的所有类型。

修改

如果您事先不知道任何类型,并且可以假设该库与可执行文件位于同一物理位置,那么以下几行中的某些内容可能会起作用:

using System;
using System.IO;
using System.Reflection;

string libraryFileName = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "myLib.dll");
Assembly assembly = Assembly.LoadFrom(libraryFileName);
Type[] myTypes = assembly.GetTypes();

答案 1 :(得分:3)

要获取所有已加载程序集的列表,您可以尝试询问appdomain:

AppDomain MyDomain = AppDomain.CurrentDomain;
Assembly[] AssembliesLoaded = MyDomain.GetAssemblies();
foreach (Assembly MyAssembly in AssembliesLoaded)
{
   //
}

然后,您可以浏览所有已加载的程序集并通过反射获取其类型。