Example #1
0
        protected override void Execute(object sender, EventArgs e)
        {
            ThreadHelper.ThrowIfNotOnUIThread();

            switch (_tyeServicesProvider.SelectedService)
            {
            case V1Service service:
                if (_tyeServicesProvider.IsAttachable(service))
                {
                    _debuggerAttacher.Attach(service.Replicas.Values);
                }
                break;

            case V1ReplicaStatus replica:
                if (_tyeServicesProvider.IsAttachable(replica))
                {
                    _debuggerAttacher.Attach(replica);
                }
                break;
            }
        }
        protected override async Task ExecuteAsync(object sender, EventArgs e)
        {
            await _tyeServicesProvider.RefreshAsync();

            await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync(Package.DisposalToken);

            var dte = Package.GetService <SDTE, DTE2>();

            var startupProjects = (Array)dte.Solution.SolutionBuild.StartupProjects;
            var solutionPath    = Path.GetDirectoryName(dte.Solution.FileName);

            if (startupProjects == null || solutionPath == null)
            {
                _logger.Log("No startup projects available.");
                return;
            }

            var replicas = new List <V1ReplicaStatus>();

            foreach (string projectPath in startupProjects)
            {
                // Combine the relative project path and the root of the solution to derive the full path of the project
                var normalizedProjectPath = Path.GetFullPath(Path.Combine(solutionPath, projectPath));

                var service = _tyeServicesProvider.Services
                              .Where(s => s.Description.RunInfo.Project != null)
                              .FirstOrDefault(s => string.Equals(Path.GetFullPath(s.Description.RunInfo.Project), normalizedProjectPath, StringComparison.InvariantCultureIgnoreCase));

                if (service != null && _tyeServicesProvider.IsAttachable(service))
                {
                    replicas.AddRange(service.Replicas.Values);
                }
            }

            _debuggerAttacher.Attach(replicas);
        }