public void CreateUserAppDomain() { Profiler.Start("PluginLoader.ReloadAppDomain"); if (Assemblies != null) { DestroyUserAppDomain(); } LoadUserAssemblies(); UserDomainReloaded?.Invoke(); // AsyncOperationOnUI?.Post(() => UserDomainReloaded?.Invoke()); Profiler.Stop("PluginLoader.ReloadAppDomain"); }
public void CreateUserAppDomain() { DestroyUserAppDomain(); var AppDomainSetup = new AppDomainSetup(); AppDomainSetup.ApplicationName = DateTime.Now.ToString("hh:MM:ss:ffff"); AppDomainSetup.ApplicationBase = AppDomain.CurrentDomain.BaseDirectory; AppDomainSetup.PrivateBinPath = AppDomain.CurrentDomain.BaseDirectory; m_PluginDomain = AppDomain.CreateDomain(DomainName, AppDomain.CurrentDomain.Evidence, AppDomainSetup); PluginDomainManager = (PluginDomainManager)m_PluginDomain.CreateInstanceAndUnwrap( typeof(PluginDomainManager).Assembly.FullName, "RobotRuntime.Plugins.PluginDomainManager"); var assemblyNames = AppDomain.CurrentDomain.GetAllAssembliesInBaseDirectory().ToArray(); PluginDomainManager.LoadAssemblies(assemblyNames); LoadUserAssemblies(); // User assemblies must be loaded before UserDomainReloaded event fires UserDomainReloaded?.Invoke(); // AsyncOperationOnUI?.Post(() => UserDomainReloaded?.Invoke()); }