public static ErrorTask AddTask(this ErrorListProvider errorListProvider, Diagnostic diagnostic, DTEProject project) { if (errorListProvider == null) { throw new ArgumentNullException(nameof(errorListProvider)); } if (diagnostic == null) { throw new ArgumentNullException(nameof(diagnostic)); } if (project == null) { throw new ArgumentNullException(nameof(project)); } TaskErrorCategory category; switch (diagnostic.Severity) { case DiagnosticSeverity.Hidden: category = TaskErrorCategory.Message; break; case DiagnosticSeverity.Info: category = TaskErrorCategory.Message; break; case DiagnosticSeverity.Warning: category = TaskErrorCategory.Warning; break; case DiagnosticSeverity.Error: category = TaskErrorCategory.Error; break; default: category = TaskErrorCategory.Message; break; } var task = new ErrorTask { ErrorCategory = category, CanDelete = true, Category = TaskCategory.Misc, Text = diagnostic.GetMessage(), Line = diagnostic.Location.GetLineSpan().StartLinePosition.Line, Column = diagnostic.Location.GetLineSpan().StartLinePosition.Character, Document = diagnostic.Location.GetLineSpan().Path, HierarchyItem = project.GetProjectHierarchyItem() }; task.Navigate += (sender, e) => { //there are two Bugs in the errorListProvider.Navigate method: // Line number needs adjusting // Column is not shown task.Line++; errorListProvider.Navigate(task, new Guid(EnvDTE.Constants.vsViewKindCode)); task.Line--; }; errorListProvider.Tasks.Add(task); return(task); }