DirectoryCatalog 扫描目录中的程序集以确定导入/导出哪些类。任何没有导入/导出的程序集都不会加载。

这是一个很棒的功能,但它是如何工作的?要调查程序集中类型的自定义属性,您不需要加载程序集吗?一旦加载,就无法卸载,所以这不是它的工作原理。

它在做某种 AppDomain 魔法吗?

最佳答案

试试看。 DirectoryCatalog 只是为给定目录中的每个 .dll 文件创建一个 AssemblyCatalog。由于 AssemblyCatalog 调用 AssemblyName.GetAssemblyName ,因此不会加载非 .NET .dll 文件(在 AssemblyCatalog 中抛出并捕获异常)。 AssemblyCatalog 在它创建的 Assembly.Load 上调用 AssemblyName。因此,在创建 DirectoryCatalog 时会立即加载程序集。没有魔法,没有 AppDomains 。但是众所周知 MEF 会将程序集加载到当前 AppDomain 中。如果需要可以卸载的程序集,请使用 MAF

关于c# - MEF的DirectoryCatalog如何工作?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9457271/

10-09 18:26