private void ReloadRemoteDomain() { DomainUnloader oldUnloaded = _unloader; var evt = UnloadingDomain; if (evt != null) { evt(this, EventArgs.Empty); } lock (this) { _members.Clear(); _modules.Clear(); ClearAssemblyLoadSet(); InitializeRemoteDomain(); LoadModules(); } RaiseModuleNamesChanged(); oldUnloaded.Dispose(); }
private static IDisposable CreateAppDomainHost <T>() where T : Sandbox { var domainName = GetAppDomainName <T>(); var info = new AppDomainSetup { ApplicationBase = AppDomain.CurrentDomain.BaseDirectory, ConfigurationFile = AppDomain.CurrentDomain.SetupInformation.ConfigurationFile, }; var domain = AppDomain.CreateDomain(domainName, null, info); T host = null; try { var assemblyName = typeof(T).Assembly.FullName; host = (T)domain.CreateInstanceAndUnwrap( assemblyName, typeof(T).FullName, false, BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance, null, null, null, null); domain.UnhandledException += Domain_UnhandledException; host.Start(); return(new DomainUnloader(host, domain)); } catch (Exception) { DomainUnloader.UnloadDomain(host, domain); throw; } }
private void InitializeRemoteDomain() { var remoteDomain = CreateDomain(out _remote); _unloader = new DomainUnloader(remoteDomain); }