internal static string GetIdeState()

in src/Microsoft.VisualStudio.Extensibility.Testing.Xunit.Shared/InProcess/VisualStudio_InProc.cs [122:169]


        internal static string GetIdeState()
        {
            return InvokeOnUIThread(() =>
            {
                var stateBuilder = new StringBuilder();

                /*
                 * Solution
                 */
                if (GlobalServiceProvider.ServiceProvider.GetService(typeof(SVsSolution)) is IVsSolution solution
                    && solution.GetSolutionInfo(out var solutionDirectory, out var solutionFile, out var userOptsFile) == VSConstants.S_OK)
                {
                    stateBuilder.AppendLine("Solution:");
                    stateBuilder.AppendLine($"  Solution Directory: {solutionDirectory}");
                    stateBuilder.AppendLine($"  Solution File:      {solutionFile}");
                    stateBuilder.AppendLine($"  User Opts File:     {userOptsFile}");
                }

                /*
                 * Error list
                 */
                if (GlobalServiceProvider.ServiceProvider.GetService(typeof(SVsTaskList)) is IVsTaskList taskList
                    && taskList.EnumTaskItems(out var enumTaskItems) == VSConstants.S_OK)
                {
                    stateBuilder.AppendLine("Error list:");

                    var index = 0;
                    var taskItems = new IVsTaskItem[10];
                    var actual = new uint[1];
                    while (enumTaskItems.Next((uint)taskItems.Length, taskItems, actual) == VSConstants.S_OK)
                    {
                        if (actual[0] == 0)
                        {
                            break;
                        }

                        for (var i = 0; i < actual[0]; i++)
                        {
                            var item = taskItems[i];
                            var text = item.get_Text(out var name) == VSConstants.S_OK ? name : string.Empty;
                            stateBuilder.AppendLine($"  {++index}: {name}");
                        }
                    }
                }

                return stateBuilder.ToString();
            });
        }