在 C# 中(或者通常在 .NET 中),无法从内存中卸载单个程序集。
卸载只能发生在 AppDomain 级别。

我想知道这种设计背后的原因是什么?其他语言支持此功能(我认为是 C++)

最佳答案

Here is an MSDN blog post 列出了一些原因。主要问题是:



我将用高级语言对此进行总结:

基本上,如果您只是删除可执行代码,则会在非托管级别出错。您将编译的代码指向不再存在的其他已编译代码,因此您的代码将跳转到无效区域,并且可能包含任意数据。

这在托管代码中是 Not Acceptable ,因为事情本来就是安全的,并且有一些保证。这些保证之一是您的代码不能执行内存的任意部分。

要正确处理这个问题,您必须更密切地跟踪更多事情,这将是一个很大的开销。另一种方法是仅在应用程序域边界跟踪这些东西,这就是所做的。

关于c# - 在 C# 中无法卸载单个程序集的原因是什么,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9390670/

10-17 00:09