.NET Core 2.2插件框架和程序集重定向

时间:2019-05-15 17:41:23

标签: c# dll .net-assembly versioning

我已经在.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));
        }

如何使我的应用程序“重定向”插件使用的共享程序集到已加载的程序集?

0 个答案:

没有答案