public VisualStudioInstance(Process hostProcess, DTE dte, Version version, ImmutableHashSet <string> supportedPackageIds, string installationPath) { HostProcess = hostProcess; Dte = dte; Version = version; SupportedPackageIds = supportedPackageIds; InstallationPath = installationPath; StartRemoteIntegrationService(dte); _integrationServiceChannel = new IpcClientChannel($"IPC channel client for {HostProcess.Id}", sinkProvider: null); ChannelServices.RegisterChannel(_integrationServiceChannel, ensureSecurity: true); // Connect to a 'well defined, shouldn't conflict' IPC channel _integrationService = IntegrationService.GetInstanceFromHostProcess(hostProcess); // Create marshal-by-ref object that runs in host-process. _inProc = ExecuteInHostProcess <VisualStudio_InProc>( type: typeof(VisualStudio_InProc), methodName: nameof(VisualStudio_InProc.Create)); // There is a lot of VS initialization code that goes on, so we want to wait for that to 'settle' before // we start executing any actual code. _inProc.WaitForSystemIdle(); SendKeys = new SendKeys(this); Editor = new Editor_OutOfProc(this); // Ensure we are in a known 'good' state by cleaning up anything changed by the previous instance CleanUp(); }