微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

动态加载网络标准实现程序集

如何解决动态加载网络标准实现程序集

我们有一个应用程序可以动态加载配置文件中指定的类型。 在 .NET Framework 中,假设所有依赖项都存在于工作目录中,只需调用 Type.GetType() 就相当简单了。

在将应用程序移植到 .NET Core 和 .NET 5.0 时,我们遇到了一些问题,其中应用程序需要显式加载/解析依赖项程序集。下面的代码处理工作目录中存在的大多数程序集:

        static ServiceManager()
        {
            AssemblyLoadContext.Default.Resolving += LoadAssembly;
        }

        private static Assembly LoadAssembly(AssemblyLoadContext context,AssemblyName assemblyName)
        {
            var exeName = $"{assemblyName.Name}.exe";
            var dllName = $"{assemblyName.Name}.dll";

            var assemblyPath = File.Exists(exeName)
                ? Path.Combine(Environment.CurrentDirectory,exeName)
                : Path.Combine(Environment.CurrentDirectory,dllName);

            return context.LoadFromAssemblyPath(assemblyPath);
        }

但是它无法解析动态加载的程序集所依赖的网络标准实现程序集。例如:

EXCEPTION (LEVEL 1): System.IO.FileNotFoundException
EXCEPTION MESSAGE: Could not load file or assembly 'Microsoft.AspNetCore.Mvc.Core,Version=5.0.0.0,Culture=neutral,PublicKeyToken=adb9793829ddae60'. The system cannot find the file specified.
STACK TRACE:

如果直接引用 netstandard 程序集,.NET Core 和 .NET 5.0 会自动解析实现程序集,但是我似乎找不到任何 API 可以让应用程序动态加载/解析此类未直接从项目引用的实现程序集。

有什么解决问题的建议吗?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。