我有一個應用程序通過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