When you’re developing an extension for Visual Studio, you might want to add errors, warnings or messages to Visual Studio’s Error List. Here is how to do it:
using System;
using Microsoft.VisualStudio.Shell;
namespace MunirHusseini.Demos
{
internal static class TaskManager
{
private static ErrorListProvider _errorListProvider;
public static void Initialize(IServiceProvider serviceProvider)
{
_errorListProvider = new ErrorListProvider(serviceProvider);
}
public static void AddError(string message)
{
AddTask(message, TaskErrorCategory.Error);
}
public static void AddWarning(string message)
{
AddTask(message, TaskErrorCategory.Warning);
}
public static void AddMessage(string message)
{
AddTask(message, TaskErrorCategory.Message);
}
private static void AddTask(string message, TaskErrorCategory category)
{
_errorListProvider.Tasks.Add(new ErrorTask
{
Category = TaskCategory.User,
ErrorCategory = category,
Text = message
});
}
}
}
Obviously, this method Initialize must be called prior to any other methods. The parameter serviceProvider can be the instance of the VSPackage. Example:
namespace MunirHusseini.Demos
{
/// <summary>
/// This is the class that implements the package exposed by this assembly.
/// </summary>
[PackageRegistration(UseManagedResourcesOnly = true)]
[InstalledProductRegistration("#110", "#112", "1.0", IconResourceID = 400)]
[Guid(GuidList.guidMyDemoPkgString)]
public sealed class MyDemoPackage : Package
{
/// <summary>
/// Initialization of the package; this method is called right after the package is sited, so this is the place
/// where you can put all the initialization code that rely on services provided by VisualStudio.
/// </summary>
protected override void Initialize()
{
base.Initialize();
TaskManager.Initialize(this);
// Some other package initialization here ...
}
}
}

Hi,
How can I add errors, warnings and messages in Error List but in a sorted order. On the first place I want to appear all my errors and then warnings and at the end the messages. Now even if I add them in order, that order is not kept. Is there any way to do this?