예제 #1
0
        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;
            }
        }
예제 #3
0
        private void InitializeRemoteDomain()
        {
            var remoteDomain = CreateDomain(out _remote);

            _unloader = new DomainUnloader(remoteDomain);
        }
예제 #4
0
 private void InitializeRemoteDomain() {
     var remoteDomain = CreateDomain(out _remote);
     _unloader = new DomainUnloader(remoteDomain);
 }