我已经在.Net Core 2.2中编写了一个可扩展为插件的应用程序。插件是具有我的插件基类实现的DLL。插件基类在共享的dll中定义。
我已经更新了具有基本类的dll,并进行了一些不间断的更改。我现在已经更新了我的应用程序,以使用共享dll的新版本。现在,当我尝试加载插件时,我使用旧版本的共享DLL编写了错误消息。如果我不修改共享DLL的版本,则插件可以正常加载。
这是我用来扫描和加载插件的代码:
foreach (var dll in Directory.GetFiles("baseDir", "*.dll", SearchOption.AllDirectories))
{
_logger.Info("Loading {0}", dll);
var a = Assembly.LoadFile(dll);
availableAssemblies[a.GetName().Name] = a;
}
// setup assembly resolver with scanned assemblies
AssemblyLoadContext.Default.Resolving += (_, b) =>
{
if (availableAssemblies.ContainsKey(b.Name))
return availableAssemblies[b.Name];
_logger.Info("Can't file assembly {0}", b.Name);
return null;
};
foreach (var a in availableAssemblies)
{
_logger.Info("Searching {0} for plugin", a.Value.FullName);
plugin = Array.Find(a.Value.GetTypes(), t => t.IsClass && !t.IsAbstract && GetAllBaseClasses(t).Any(b => b.FullName == typeof(PluginBase).FullName));
}
如何使我的应用程序“重定向”插件使用的共享程序集到已加载的程序集?