首页 > 解决方案 > NetCORE 中的 BuildManager.AddReferencedAssembly

问题描述

我有 2 个带有 net core 的 web api 项目。1.- 基础网络 API。2.-联系web api。

我可以从基本 web api 动态加载联系人 web api。但未加载实体和层程序集。要使联系人 Web api 正常工作,我必须在基本 Web api 中手动添加引用实体和层程序集。在 NET Framework 中,我使用 BuildManager.AddReferencedAssembly,但在 net core 中不存在。如何使用 net core 添加动态引用?谢谢。

标签: c#.net-core

解决方案


我在 MVC 工作,那个项目是在插件系统上的。在这个项目中,我还使用“BuildManager.AddReferencedAssembly”方法来添加程序集的引用。不幸的是,这种方法只能在框架 4.x 中使用。

经过一些研究,我在这个地址上找到了解决这个问题的方法:

https://github.com/simplcommerce/SimplCommerce

您可以分析此项目以改进您的解决方案。(我假设您正在使用插件系统)

但是,如果你只需要一个方法来替换“BuildManager.AddReferencedAssembly”方法,你可以使用这个:

static void AddApplicationPart(IMvcBuilder mvcBuilder, Assembly assembly)
{
    var partFactory = ApplicationPartFactory.GetApplicationPartFactory(assembly);
    foreach (var part in partFactory.GetApplicationParts(assembly))
    {
        mvcBuilder.PartManager.ApplicationParts.Add(part);
    }

    var relatedAssemblies = RelatedAssemblyAttribute.GetRelatedAssemblies(assembly, throwOnError: false);
    foreach (var relatedAssembly in relatedAssemblies)
    {
       partFactory = ApplicationPartFactory.GetApplicationPartFactory(relatedAssembly);
       foreach (var part in partFactory.GetApplicationParts(relatedAssembly))
       {
           mvcBuilder.PartManager.ApplicationParts.Add(part);
       }
    }
}

要使用此方法,您需要 IMvcBuilder。您可以从如下代码中获取它:

IMvcBuilder  _mvcBuilder = services.AddMvc();

“服务”变量必须是从 IServiceCollection 派生的类型。简单地说,您可以在 StartUp 类的 ConfigureServices 方法中找到它。

最后,我可以满怀信心地说,我已经测试过了,它有效。


推荐阅读