简单的例子。
应用程序A有一个类库C,它在整个过程中使用。
应用程序A使用MEF从插件目录中发现并加载插件模块P1和P2。每个插件一个组件。
P1和P2都依赖于C(类库)。
构建过程将确保P1使用的C版本与A引用的版本相同。
我假设我最终不会同时加载同一个程序集的多个副本?默认情况下,我最终在Plugin目录中找到了C的副本以及A的应用程序目录
答案 0 :(得分:1)
为了确保您不会以重复的程序集结束,您可以将插件项目中的Copy Local
属性更改为合同(C)库的false,这样在构建时,它将不会被复制到输出目录。
我认为你应该没问题,因为由于Fusion加载程序规则,CLR不会加载相同的程序集 - 第一个是查看目标程序集是否已加载到AppDomain
中。但是,你必须要小心,因为任何使用Assembly.LoadFrom
的代码如果实际发现程序集在磁盘上有不同的位置,可能会导致异常。