我已经创建了一个支持重新加载插件的插件架构,并且不使用多个AppDomain。我只需使用Assembly.Load(Byte[])
方法在dll更改时创建一个新程序集,然后通过myAssembly.CreateInstance(type.FullName)
创建插件实例。这一切都很好,很好。现在我想支持插件可以引用组件,并且可以动态更改这些引用。我已经实现了Appdomain.AssemblyResolve
事件,当然,它可以加载一次插件的引用,但不会在它们发生更改时重新加载引用的dll。
有没有办法从程序集创建实例并告诉它使用哪些其他程序集作为参考?
小记:我知道app域但不能使用它们因为我不想序列化我在内存中的数据(很多GB)。
答案 0 :(得分:1)
.NET将根据限定的程序集名称找到您的引用,如果.NET无法自动解析它正在查找的程序集(通过将限定名称和加载上下文与已加载的程序集匹配,或从中加载),则只会触发AssemblyResolve。探测路径)。
因此,如果您已经解析了特定的引用类型,或者它已自动解决,那么您将无法从其他地方加载它。此外,由于无法卸载在给定AppDomain中的特定上下文中加载的程序集(由完整程序集名称标识),因此您无法在同一AppDomain中卸载/重新加载这些引用的程序集。