【发布时间】:2017-08-24 17:54:27
【问题描述】:
我目前正在使用AssemblyLoadContext.Default.LoadFromAssemblyPath(path/to/netstandard1.6lib.dll),并且很好奇如何处理该库可能具有的任何 nuget 依赖项?
例如: 库 A 动态加载库 B。 库 B 依赖于 NuGet 的 Redis。
库 B 加载正确,但在使用 redis 客户端时——我们收到一个令人讨厌的 FileNotFoundException ,抱怨找不到 redis 程序集。该场景确实是典型的模块加载器类型的事情。
Assembly assembly = AssemblyLoadContext.Default.LoadFromAssemblyPath(path);
if (assembly == null)
throw new InvalidExtensionException(name, path);
TypeInfo type = assembly.DefinedTypes.FirstOrDefault(x => x.ImplementedInterfaces.Contains(typeof(IExtension)));
if (type == null)
throw new InvalidExtensionException(name, path);
IExtension extension = Activator.CreateInstance(type.AsType(), name, _dependencyUtility) as IExtension;
if (extension == null)
throw new InvalidExtensionException(name, path);
extensions.Add(extension);
当 Activator 创建实例时,扩展的构造函数会尝试创建一个新的 redis 客户端——结果一切都失败了。
关于如何在运行时处理来自 nuget 的 3 级依赖项的任何想法?
【问题讨论】:
-
你可以在这里找到一些信息stackoverflow.com/questions/31859267/…
-
这似乎更多是关于在当前(无论 .NET 核心/标准等效项是什么)AppDomain 中加载 nuget 包,而不是加载具有更多依赖项的依赖项。
标签: c# .net .net-core .net-standard