我想从引用的(它是项目引用)程序集中访问类型信息。困难的方法是使用VS解决方案解析程序集的文件路径,并从文件加载程序集,但我确信由于引用的程序集已在执行程序集中解析/加载,因此必须有一个更简单的方法,但那种方式真的逃脱了我。我怎么能这样做?
例如,在我的MainAssembly
中,我引用了LibAssembly
。现在,在MainAssembly
中的代码中,我需要迭代LibAssembly
中定义的类型的成员。
答案 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)
{
//
}
然后,您可以浏览所有已加载的程序集并通过反射获取其类型。