Hot Unload/Reload of a DLL used by an Application

后端 未结 3 1168
无人共我
无人共我 2020-11-27 21:11

I have an application that loads a DLL to execute a specific part of processing

Example : \"Application.dll\" loading \"Process.dll\" 

相关标签:
3条回答
  • 2020-11-27 21:58

    Once an assembly has been loaded into an AppDomain, it cannot be unloaded. You have to dispose of the AppDomain. If you need to load and unload assemblies within an application, you'll need to spawn a new AppDomain and load the assembly, then destroy the AppDomain once you're finished with the assembly.

    0 讨论(0)
  • 2020-11-27 22:10

    While you seem to solve the problem according to your edit here are couple comments:

    Watch out for objects from your Process.dll "leaking" into main AppDomain. I.e. something like throwing custom exception defined in Process.dll and caught in main AppDomain will force Process.dll to be loaded into main AppDomain. Check list of loaded assemblies in the main AppDomain after performing operations you are interested in.

    Unloading of AppDomain can fail and may take long time.

    0 讨论(0)
  • 2020-11-27 22:14

    It's been quite a while since I looked at this but I'm fairly sure that you'd need to create a new AppDomain and then load the DLL inside there.

    The reason is that you can't unload an Assembly by it self but you can unload an AppDomain that contains an Assembly.

    Here's a CodeProject article that describes how to do this: To Unload a Running Dll

    0 讨论(0)
提交回复
热议问题