.NET Core 2.2 Plugin Framework и перенаправление сборки - PullRequest
1 голос
/ 15 мая 2019

Я написал приложение в .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));
        }

Как я могузаставить мое приложение «перенаправить» общую сборку, используемую моим плагином, на загруженную?

...