我有一个新的.net核心mvc应用程序,使用mef的n层结构将每个层作为插件加载。我遇到的问题是当使用实体框架核心nuget包时,使用mef加载数据访问层。我得到:Could not load file or assembly 'Microsoft.EntityFrameworkCore, Version=2.2.1.0, Culture=neutral, PublicKeyToken=adb9793829ddae60'. The system cannot find the file specified
,当我打电话给CreateContainer()
时。
我手动尝试将依赖项dll添加到输出目录,但仍然无济于事。我还确定了我的mef范围,使其仅加载与我的库命名匹配的dll。仍然要走。
我创建了一个dummy project on github来显示我遇到的错误。实际的代码在Mvc项目的启动过程中炸毁了on line 96。
var registrar = new ModuleRegistrar(services);
var conventions = new ConventionBuilder();
conventions
.ForTypesDerivedFrom<IModule>()
.Export<IModule>()
.Shared();
var dir = Path.GetDirectoryName(new Uri(Assembly.GetExecutingAssembly().Location).LocalPath);
var dlls = Directory.GetFiles(dir, "TestMEF*.dll", SearchOption.AllDirectories);
var asms = dlls.Select(AssemblyLoadContext.Default.LoadFromAssemblyPath).ToList();
var cfg = new ContainerConfiguration().WithAssemblies(asms, conventions);
using (var container = cfg.CreateContainer())
foreach (var module in container.GetExports<IModule>())
module.Register(registrar);
如果有人对此有最迷惑的想法,将不胜感激。