我们的 .NET 3.5 C# 应用程序创建了多个应用程序域。每个应用程序域加载相同的非托管第 3 方 dll。此 dll 在初始化时读取配置文件。如果配置在运行时发生变化,则必须卸载并重新加载 dll。这个 dll 不在我们的范围内,无法正确重写。
是否每个应用程序域都可以访问此非托管 dll 的单独副本,或者 Windows 是否保留该 dll 的一个副本并维护使用计数?如果是后者,我们如何让非托管 dll 的每个实例反射(reflect)其独特的配置?
最佳答案
我认为非托管 dll 仅由操作系统在每个进程中加载一次,因此每个应用程序域都将具有相同的加载实例。要卸载 dll,请使用 FreeLibrary 函数。但是,由于多个应用程序域可能加载了 dll,因此无法保证来自一个应用程序域的 FreeLibrary 实际上会释放/卸载 dll。
正如 BillW 所说,这对我来说也是一场设计噩梦!
关于c# - 多个应用程序域调用同一个非托管 dll,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2513828/