【问题标题】:How should I load assemblies across the application domain boundary to load and unload modules?我应该如何跨应用程序域边界加载程序集以加载和卸载模块?
【发布时间】:2025-12-24 06:10:11
【问题描述】:

我知道在运行时动态加载程序集的限制会阻止它被卸载。相反,有人建议,如果这是一个要求,我应该改为在其他应用程序域中加载模块,然后跨域边界执行代码。

如何简化此开发过程并使用此方案?有哪些工具或框架可用?

【问题讨论】:

    标签: .net dynamic-linking applicationdomain


    【解决方案1】:

    这取决于您的“宿主”应用与动态加载的代码之间的交互有多复杂。如果它相当复杂,那么您可能想要使用完整的 System.AddIn 路线。如果您的交互相当简单,那么您可能应该只编写自己的类来处理程序集的加载和卸载。我已经为各种较小的项目做了很多次,所以如果有帮助,我可以发布代码。

    【讨论】:

    • 这会很有帮助,交互几乎是在托管脚本级别,但它仍然是本机代码,说来话长。
    【解决方案2】:

    MEF [1] 是否将您带往正确的方向?或者你可以选择温莎城堡 [2],虽然我不需要卸载任何一个。

    [1]http://code.msdn.microsoft.com/mef

    [2]http://www.castleproject.org/container/index.html

    【讨论】:

    • MEF 无法卸载程序集,据我所知,Windsor 也没有,它们都只是通用组合框架。 MAF 是我熟悉的唯一选项。