加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 在.NET Core中替换AppDomain.GetLoadedAssemblies()?

发布时间:2020-12-15 08:26:46 所属栏目:百科 来源:网络整理
导读:我正在尝试编写一些逻辑来镜像原始.NET应用程序中的一些现有逻辑.在我的OnModelCreating()方法中,我想加载已加载程序集中的所有当前类型,以查找需要在模型中注册实体类型配置的类型. 这是在.NET中使用AppDomain.CurrentDomain.GetAssemblies()完成的.选择(a
我正在尝试编写一些逻辑来镜像原始.NET应用程序中的一些现有逻辑.在我的OnModelCreating()方法中,我想加载已加载程序集中的所有当前类型,以查找需要在模型中注册实体类型配置的类型.

这是在.NET中使用AppDomain.CurrentDomain.GetAssemblies()完成的.选择(a => a.GetTypes()),但.NET Core中不再存在AppDomain.

有没有新的方法来做到这一点?

我在网上看到了一些使用DependencyContext.Default.RuntimeLibraries的例子,但DependencyContext.Default似乎也不再存在.

编辑:

我现在发现将Microsoft.Extensions.DependencyModel添加到.netcoreapp1.1项目可以正常工作.但是我实际上正在编写一个包含多个项目的解决方案,我在某种程度上需要在我的.netstandard1.4项目中执行此类型加载,其中我的DbContext实现和实体类型配置是

解决方法

您正在寻找的内容被广泛解释为 here.Autor建议创建polyfill.

如果页面丢失,我将复制粘贴.

public class AppDomain
{
    public static AppDomain CurrentDomain { get; private set; }

    static AppDomain()
    {
        CurrentDomain = new AppDomain();
    }

    public Assembly[] GetAssemblies()
    {
        var assemblies = new List<Assembly>();
        var dependencies = DependencyContext.Default.RuntimeLibraries;
        foreach (var library in dependencies)
        {
            if (IsCandidateCompilationLibrary(library))
            {
                var assembly = Assembly.Load(new AssemblyName(library.Name));
                assemblies.Add(assembly);
            }
        }
        return assemblies.ToArray();
    }

    private static bool IsCandidateCompilationLibrary(RuntimeLibrary compilationLibrary)
    {
        return compilationLibrary.Name == ("Specify")
            || compilationLibrary.Dependencies.Any(d => d.Name.StartsWith("Specify"));
    }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读