我有一个通过 MEF 加载插件的应用程序。
该应用程序在终端服务器上的多个实例中运行。
当我需要在生产环境中测试新插件时,我会将 MEF 重定向到另一个文件夹。问题是有时即使在重定向之后程序集也会从原始文件夹加载。 它不会每次都发生,我无法在我的机器上重现它。我怀疑这是某种缓存问题。
MEF 加载代码如下所示:
using (var catalog = new AggregateCatalog()) {
Console.WriteLine("Loading components from {0}", folder);
catalog.Catalogs.Add(new DirectoryCatalog(folder, "*.dll"));
using (var container = new CompositionContainer(catalog)) {
try {
container.ComposeParts(this);
}
catch (ReflectionTypeLoadException ex) {
foreach (var loaderException in ex.LoaderExceptions) {
// log loading error
}
}
foreach (var assembly in _allComponents.GroupBy(x => x.GetType().Assembly)) {
Console.WriteLine("Loaded from {0}", assembly.Key.CodeBase);
}
上面代码的结果看起来像
Loading components from C:\NewPlugins
Loaded from C:\OldPlugins