private void TearDownAppDomain(object sender, EventArgs e) { if (m_remoteDomain == null) { return; } OnBeforeUnload((ActionShim)(() => NestedToolset.Unload())); AppDomain.Unload(m_remoteDomain); var expected = Path.Combine( Deployment.Path, WkhtmltoxBindings.DLLNAME); foreach (ProcessModule module in Process.GetCurrentProcess().Modules) { if (module.FileName == expected) { while (WinApiHelper.FreeLibrary(module.BaseAddress)) { } break; } } m_remoteDomain = null; Loaded = false; if (Unloaded != null) { Unloaded(this, EventArgs.Empty); } }
public override void Load(IDeployment deployment = null) { if (Loaded) { return; } if (deployment != null) { Deployment = deployment; } SetupAppDomain(); var handle = Activator.CreateInstanceFrom( remoteDomain, typeof(TToolset).Assembly.Location, typeof(TToolset).FullName, false, BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance, null, null, null, null, null); NestedToolset = handle.Unwrap() as IToolset; NestedToolset.Load(Deployment); Deployment = NestedToolset.Deployment; Loaded = true; }
public override void Load(IDeployment deployment) { if (Loaded) { return; } if (deployment != null) { Deployment = deployment; } SetupAppDomain(); var handle = Activator.CreateInstanceFrom( m_remoteDomain, typeof(TToolset).Assembly.Location, typeof(TToolset).FullName, false, BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance, null, null, null, null, null); NestedToolset = handle.Unwrap() as IToolset; if (NestedToolset == null) { throw new InvalidOperationException("Unable to locate an instance of IToolset from the handle."); } NestedToolset.Load(Deployment); Deployment = NestedToolset.Deployment; Loaded = true; }