Показать список ошибок Windows в надстройке Visual Studio 2010

У меня Win7 64 бит, Visual Studio 2010, и я разработал Addin для Vs2010.

Я пытаюсь показать сообщения в списке ошибок Windows VS.
Я использую ErrorListProvider в событии сборки OnBuildProjConfigDone для Addin

this._buildEvents.OnBuildProjConfigDone += new _dispBuildEvents_OnBuildProjConfigDoneEventHandler(_buildEvents_OnBuildProjConfigDone);

Я получаю эту ошибку InvalidOperationException

Для работы этой функции должна быть установлена ​​служба Microsoft.VisualStudio.Shell.Interop.IVsTaskList. Убедитесь, что эта услуга доступна.

соединять

 public partial class Connect : IDTExtensibility2, IDTCommandTarget, System.Windows.Forms.IWin32Window, IOleCommandTarget

OnBuildProjConfigDone

void _buildEvents_OnBuildProjConfigDone(string project, string projectConfig, string platform, string solutionConfig, bool success)
{

// Omitted
 if (!resul)
 {
                project.DTE.ExecuteCommand("Build.Cancel");

                var errorListHelper = new ErrorListHelper();
                ErrorListProvider errorProvider = errorListHelper.GetErrorListProvider();
                var newError = new ErrorTask();
                newError.ErrorCategory = TaskErrorCategory.Message;
                newError.Category = TaskCategory.BuildCompile;
                newError.Text = "Cualquier mensaje de error aqui";
                errorProvider.Tasks.Add(newError);
 }
}      

ErrorListHelper

public class ErrorListHelper : System.IServiceProvider
{
    public ErrorListProvider GetErrorListProvider()
    {
        ErrorListProvider provider = new ErrorListProvider(this);
        provider.ProviderName = "Provider";
        provider.ProviderGuid = System.Guid.NewGuid();
        return provider;
    }

    public object GetService(Type serviceType)
    {
        return Package.GetGlobalService(serviceType);
    }
}

Предложение @JohnL: я установил точку останова в своем методе GetService, а Package.GetGlobalService возвращает ноль.

Какие-либо предложения?

1 ответ

Решение

Райан Молден (MSFT) говорит:

Package.GetGlobalService полагается как минимум на один загруженный пакет MPF (из конкретной версии MPF, на которую вы ссылаетесь). Поскольку вы сами являетесь надстройкой, а не пакетом, вы не можете этого гарантировать.

Вы должны передать что-то вроде нового ServiceProvider((Microsoft.VisualStudio.OLE.Interop.IServiceProvider))) в качестве аргумента ErrorListProvide

Package.GetGlobalService возвращает ноль.

Я использую этот код в моем Addin. Я проверяю это, и я получаю не ошибку, и я могу показать ошибки и предупреждения в ErrorList Windows VS. Я проверю больше для безопасного.

 public partial class Connect
    {
        ErrorListProvider _errorListProvider = null;

        void CreateErrorListProvider()
        {
            if (_errorListProvider == null)
            {
                System.IServiceProvider serviceProvider = new ServiceProvider(_applicationObject as Microsoft.VisualStudio.OLE.Interop.IServiceProvider);
                _errorListProvider = new ErrorListProvider(serviceProvider);
                _errorListProvider.ProviderName = "custom Errors";
                _errorListProvider.ProviderGuid = new Guid("xxxxxxxxxxxxxx");

            }
        }
Другие вопросы по тегам