public static Task <VsInstance> Launch(VsHive hive, TimeSpan timeout, IDiagnostics diagnostics) { Process process = null; KillProcessJob killProcessJob = null; return(diagnostics.RunAsync("Launching Instance", async output => { try { process = VisualStudioUtil.StartProcess(hive); killProcessJob = new KillProcessJob(process); var dte = await VisualStudioUtil.GetDTE(process, timeout); var invoker = (IRemoteComInvoker)dte.GetObject("VsixTesting.Invoker"); InvokeRemote(invoker, nameof(Remote.AutoKillWhenProcessExits), Process.GetCurrentProcess().Id); killProcessJob.Release(); return new VsInstance(hive.Version, process, dte, invoker); } catch { process?.Kill(); process?.Dispose(); throw; } })); }
public static async Task Prepare(VsHive hive, IEnumerable <string> extensionsToInstall, bool resetSettings, IDiagnostics diagnostics) { await diagnostics.RunAsync("Preparing Instance", async output => { var installResult = default((int InstallCount, bool HasSettingsFile, string Output)); var invokerAssembly = Assembly.GetExecutingAssembly(); using (var invoker = new TempFile(EmbeddedResourceUtil.ExtractResource(invokerAssembly, "VsixTesting.Invoker.vsix"))) { EmbeddedResourceUtil.ApplyDateTime(invoker.Path, invokerAssembly, "VsixTesting.Invoker.vsix"); installResult = await VisualStudioUtil.InstallExtensionsAsync( hive, extensionsToInstall.Concat(new[] { invoker.Path })); output.WriteLine(installResult.Output); if (installResult.InstallCount > 0) { output.WriteLine("Clearing cache"); await VisualStudioUtil.ClearCacheAsync(hive); output.WriteLine("Updating configuration"); await VisualStudioUtil.UpdateConfigurationAsync(hive); } } if (!installResult.HasSettingsFile || resetSettings) { output.WriteLine("Resetting settings"); await VisualStudioUtil.ResetSettingsAsync(hive); } }); }
public static Task RunAsync(this IDiagnostics diagnostics, string displayName, Action action) { return(diagnostics.RunAsync(displayName, output => { action(); return Task.FromResult(0); })); }
public static Task AttachDebugger(Process process, bool debugMixedMode, IDiagnostics diagnostics) { return(diagnostics.RunAsync("Attaching Debugger", output => { var dte = VisualStudioUtil.GetDteFromDebuggedProcess(Process.GetCurrentProcess()); if (dte != null) { VisualStudioUtil.AttachDebugger(dte, process, debugMixedMode ? "Managed/Native" : "Managed"); } })); }
public static async Task Prepare(VsHive hive, IEnumerable <string> extensionsToInstall, bool resetSettings, IDiagnostics diagnostics, bool installInvoker = true) { await diagnostics.RunAsync("Preparing Instance", async output => { var invokerAssembly = Assembly.GetExecutingAssembly(); var resourceName = $"VsixTesting.Invoker{(hive.Version.Major >= 17 ? ".17" : string.Empty)}.vsix"; using (var invoker = new TempFile(EmbeddedResourceUtil.ExtractResource(invokerAssembly, resourceName))) { EmbeddedResourceUtil.ApplyDateTime(invoker.Path, invokerAssembly, resourceName); if (installInvoker) { extensionsToInstall = extensionsToInstall.Concat(new[] { invoker.Path }); } var installResult = await VisualStudioUtil.InstallExtensionsAsync(hive, extensionsToInstall); output.WriteLine(installResult.Output); if (installResult.InstallCount > 0) { output.WriteLine("Clearing cache"); await VisualStudioUtil.ClearCacheAsync(hive); output.WriteLine("Updating configuration"); await VisualStudioUtil.UpdateConfigurationAsync(hive); } } if (resetSettings) { output.WriteLine("Resetting settings"); await VisualStudioUtil.ResetSettingsAsync(hive); } }); }
public static Task RunAsync(this IDiagnostics diagnostics, string displayName, Func <Task> function) => diagnostics.RunAsync(displayName, output => function());
public static Task RunAsync(this IDiagnostics diagnostics, string displayName, Action <IOutput> function) => diagnostics.RunAsync(displayName, output => { function(output); return(Task.FromResult(0)); });
public static Task RunAsync(this IDiagnostics diagnostics, string displayName, Func <IOutput, Task> function) => diagnostics.RunAsync(displayName, async output => { await function(output); return(0); });