为什么 Assembly.GetTypes() 需要引用?

Pet*_*ter 7 c# reflection types system.reflection

我想从我的程序集中获取所有类型,但我没有引用,我也不关心它们。查找接口类型与引用有什么关系?我有办法解决这个问题吗?

Assembly assembly = Assembly.LoadFrom(myAssemblyPath);
Type[] typeArray = assembly.GetTypes();
Run Code Online (Sandbox Code Playgroud)

抛出: FileNotFoundException 无法加载文件或程序集“某些引用的程序集”或其依赖项之一。该系统找不到指定的文件。

Jon*_*Jon 5

加载程序集也需要加载它的所有依赖项,因为程序集的代码可以在加载后执行(实际上不运行任何东西,只是反映它并不重要)。

要加载一个程序集以便对其进行反射,您需要将其加载到仅反射上下文中,例如ReflectionOnlyLoadFrom. 这也不需要加载任何引用的程序集,但是您无法运行代码并且反射有时会变得比您习惯的更尴尬。

  • 听起来不错,但后来我明白了:无法解析对程序集“refAssmbly”的依赖,因为它尚未预加载。使用 ReflectionOnly API 时,必须通过 ReflectionOnlyAssemblyResolve 事件预加载或按需加载依赖程序集。基本上就是想看看,那为什么要解析引用呢? (7认同)