This is a JIT compiler that instructs the CLR to load an assembly as soon as it translates it into machine code that runs on demand and the exact time is not deterministic. Regarding the second question, as soon as the assembly is loaded into AppDomain, the only way to unload it is to destroy this AppDomain, there is no other way to unload the assembly.
source share