我想从我的程序集中获取所有类型,但我没有引用,也不关心它们。查找接口类型与引用有什么关系?我有办法解决这个问题吗?
Assembly assembly = Assembly.LoadFrom(myAssemblyPath);
Type[] typeArray = assembly.GetTypes();
抛出: FileNotFoundException 无法加载文件或程序集“某些引用的程序集”或其依赖项之一。该系统找不到指定的文件。
我想从我的程序集中获取所有类型,但我没有引用,也不关心它们。查找接口类型与引用有什么关系?我有办法解决这个问题吗?
Assembly assembly = Assembly.LoadFrom(myAssemblyPath);
Type[] typeArray = assembly.GetTypes();
抛出: FileNotFoundException 无法加载文件或程序集“某些引用的程序集”或其依赖项之一。该系统找不到指定的文件。
加载程序集还需要加载它的所有依赖项,因为程序集中的代码可以在加载后执行(您实际上不运行任何东西只是反映它并不重要)。
要加载程序集以明确反映它的目的,您需要使用 eg将其加载到仅反射上下文ReflectionOnlyLoadFrom
中。这也不需要加载任何引用的程序集,但是您无法运行代码,并且反射有时会变得比您习惯的更尴尬。
它似乎是仅在程序集中定义的 Get Types的副本,解决方案是:
public static Type[] GetTypesLoaded(Assembly assembly)
{
Type[] types;
try
{
types = assembly.GetTypes();
}
catch (ReflectionTypeLoadException e)
{
types = e.Types.Where(t => t != null).ToArray();
}
return types;
}
为了加载程序集,有必要加载程序集的依赖项。例如,如果您的程序集包含返回 an 的类型,XmlNode
那么您将不得不加载System.Xml.dll