0

简单的例子。

应用程序 A 有一个贯穿使用的类库 C。

应用程序 A 使用 MEF 从插件目录中发现和加载插件模块 P1 和 P2。每个插件一个组件。

P1 和 P2 都依赖于 C(类库)。

构建过程将确保 P1 使用的 C 版本与 A 引用的版本相同。

我假设我不会一次加载同一个程序集的多个副本?默认情况下,我最终会在插件目录和 A 的应用程序目录中获得 C 的副本。

4

1 回答 1

1

为确保您不会得到重复的程序集,您可以Copy Local在插件项目中将合同 (C) 库的属性更改为 false,这样在构建时,它不会被复制到输出目录。

我认为你应该没问题,因为由于 Fusion 加载器规则,CLR 不会加载相同的程序集两次 - 首先是查看目标程序集是否已经加载到AppDomain. 但是,您必须小心,因为Assembly.LoadFrom如果实际发现程序集在磁盘上具有不同的位置,则使用的任何代码都可能导致发生异常。

于 2012-08-31T07:53:06.167 回答