.NET实现dll插件化的完美支持

1个回答

写回答

GAO2023

2026-01-01 23:00

+ 关注

在.net里,插件化仅做加载而不卸载的话,诚如其他答主所说,借助反射调用就能轻松达成。不过,要是想实现动态加载,并且在运行结束后卸载,这可就没那么容易了,尤其当插件引用了第三方库的时候。在.net core中,只有在不存在强gc句柄时,assemblyloadcontext(alc)才能彻底卸载。这就意味着插件不能有强gc句柄,也不能存在未结束的线程。这乍一听好像不难,但实际操作中,一旦使用匿名函数订阅事件,或者出现忘记释放的GCHandle,就极易引发内存泄漏,进而导致插件无法卸载。更不用说那些完全无法完全掌控的第三方库了。例如知名的跨平台ui框架avalonia,就存在上述的所有问题。一旦在插件里使用了avalonia,alc就无法卸载。avalonia存在这些问题,很大程度上是因为avalonia项目自身引用的部分用于和非托管代码交互的第三方库在实现上存在问题,会产生伴随整个进程生命周期的强句柄。

举报有用(0分享收藏

Copyright © 2025 IZhiDa.com All Rights Reserved.

知答 版权所有 粤ICP备2023042255号