Я написал приложение в .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));
}
Как я могузаставить мое приложение «перенаправить» общую сборку, используемую моим плагином, на загруженную?