我有一个应用程序通过MEF加载插件。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
难道你在两个目录中都有相同标识的程序集吗?如果是这样,只需创建一个插件更新,就可以使您的程序集具有强大的名称并增加版本。 –
是的,当然他们有相同的身份。如果这是问题,我认为'DirectoryCatalog'是一个坏名字,因为它通过身份加载程序集,而不是从目录加载。 – adrianm