如何解决动态加载网络标准实现程序集
我们有一个应用程序可以动态加载配置文件中指定的类型。 在 .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 举报,一经查实,本站将立刻删除。