private static void Main(string[] args) { var typedArgs = TypedArgs.FromArgs(args); var config = new RuntimeConfig(); config.AddCodeBaseFor(typeof(Program).Assembly.GetName()); config.AddCodeBaseFor(typeof(IPluginController).Assembly.GetName()); config.AddCodeBaseFor(typeof(ILogService).Assembly.GetName()); var setup = new AppDomainSetup() { ApplicationBase = AppDomain.CurrentDomain.BaseDirectory, PrivateBinPath = Environment.CurrentDirectory, PrivateBinPathProbe = "ExcludeAppBase", ConfigurationFile = typedArgs.AssemblyFile + ".config" }; setup.SetConfigurationBytes(config.GetBytes()); var pluginDomain = AppDomain.CreateDomain("Plugin", null, setup); pluginDomain.AssemblyResolve += AssemblyResolve; var bootstrapper = (Bootstrapper)pluginDomain.CreateInstanceAndUnwrap(typeof(Bootstrapper).Assembly.FullName, typeof(Bootstrapper).FullName); bootstrapper.RunPluginDomain(args); }
public void RunPluginDomain(string[] args) { var typedArgs = TypedArgs.FromArgs(args); parentProcess = Process.GetProcessById(typedArgs.ParentProcessId); parentProcess.Exited += ParentProcessExited; parentProcess.EnableRaisingEvents = true; Dispatcher = Dispatcher.CurrentDispatcher; RemoteServiceLocator.InitializeIpcChannel(typedArgs.InstanceName); RemotingConfiguration.RegisterWellKnownServiceType(typeof(PluginLoader), "PluginLoader", WellKnownObjectMode.Singleton); // Signal ready var readyEvent = EventWaitHandle.OpenExisting(typedArgs.InstanceName + ".Ready"); readyEvent.Set(); Dispatcher.Run(); }