2010-03-25 77 views
4

我们的.NET 3.5 C#应用程序创建了多个应用程序域。每个appdomain加载相同的非托管第三方dll。这个dll在初始化时读取一个配置文件。如果配置在运行时更改,则必须卸载并重新加载dll。这个DLL不在我们的范围内正确重写。几个应用程序域调用相同的非托管dll

是否每个appdomain都有权访问这个非托管dll的separtate副本,还是Windows保留dll的一个副本并维护使用次数?如果后者是这种情况,我们如何获得非托管dll的每个实例以反映其独特配置?

+0

当你说'加载',你的意思是通过'LoadLibrary'? – leppie 2010-03-25 08:01:27

+0

建议您详细说明配置文件更改的具体情况:更改内容的方式:您是否暗示以任意间隔创建新的AppDomain,然后读取配置文件,该文件可能已由应用程序更改进展?因此,无论何时配置文件改变,所有加载了前一个配置文件的dll都必须卸载并重新加载?那么给定的'dll无法在通知配置文件已更改时重新配置自身?听起来像是一场设计噩梦。 – BillW 2010-03-25 08:12:09

+0

Leppie - 通过“加载”我的意思是LoadLibrary。 BillW--我同意,这是一个超出我们控制范围的设计噩梦。我们现在需要使用它。只要用户需要在“项目”之间切换(不重要的是这种情况下的内容)并随时可能发生,配置文件就会更改。 – 2010-03-25 09:37:09

回答

0

我认为托管DLL由OS每个进程只有一次加载,所以每一个应用程序域将具有相同的加载实例。要卸载dll,请使用FreeLibrary功能。但是,由于多个应用程序域可能已经加载了dll,因此不能保证来自一个应用程序域的FreeLibrary实际上可以释放/卸载dll。

正如BillW所说,这对我来说似乎也是一种设计噩梦!

相关问题