NetCORE中的BuildManager.AddReferencedAssembly

时间:2019-06-28 23:40:56

标签: c# .net-core

我有2个具有网络核心的Web api项目。 1.-基本的Web API。 2.-联系网络API。

我可以从基本Web API动态加载联系人Web API。但是没有加载实体和图层程序集。为了使联系人Web api正常工作,我必须在基本Web api中手动添加参考实体和图层程序集。 在NET Framework中,我使用BuildManager.AddReferencedAssembly,但在网络核心中不存在。如何添加带有网络核心的动态参考?谢谢。

1 个答案:

答案 0 :(得分:0)

我在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方法中找到它即可。

最后,我可以自满地说,我已经测试过并且可以正常工作。