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