Exemplo n.º 1
0
        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;
                }
            }));
        }
Exemplo n.º 2
0
        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);
                }
            });
        }
Exemplo n.º 3
0
 public static Task RunAsync(this IDiagnostics diagnostics, string displayName, Action action)
 {
     return(diagnostics.RunAsync(displayName, output =>
     {
         action();
         return Task.FromResult(0);
     }));
 }
Exemplo n.º 4
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");
         }
     }));
 }
Exemplo n.º 5
0
        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);
                }
            });
        }
Exemplo n.º 6
0
 public static Task RunAsync(this IDiagnostics diagnostics, string displayName, Func <Task> function)
 => diagnostics.RunAsync(displayName, output => function());
Exemplo n.º 7
0
 public static Task RunAsync(this IDiagnostics diagnostics, string displayName, Action <IOutput> function)
 => diagnostics.RunAsync(displayName, output =>
 {
     function(output);
     return(Task.FromResult(0));
 });
Exemplo n.º 8
0
 public static Task RunAsync(this IDiagnostics diagnostics, string displayName, Func <IOutput, Task> function)
 => diagnostics.RunAsync(displayName, async output =>
 {
     await function(output);
     return(0);
 });