【问题标题】:Show ErrorList Windows in Visual Studio 2010 Addin在 Visual Studio 2010 插件中显示错误列表窗口
【发布时间】:2012-12-13 15:48:50
【问题描述】:

我有 Win7 64 位,Visual Studio 2010,我为 Vs2010 开发了一个插件。

我尝试在 Windows VS 错误列表中显示消息。
我在 Addin 的 OnBuildProjConfigDone 构建事件中使用 ErrorListProvider

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 正在返回 null

有什么建议吗?

【问题讨论】:

  • 这很奇怪,我正要发布一个关于这个确切问题的问题(或者,至少,我认为这是同一个问题)。就我而言,errorProvider.Tasks.Add 正在抛出 InvalidOperationException,并带有该错误消息。你能在GetService 方法中设置一个断点,看看Package.GetGlobalService 是否返回null?塔!
  • 只是我已经确认相同的代码在 VS2008 和 2010 VSPackage 中有效。 (稍作修改,因为 Package 已经有一个 GetService 方法)。 VS2010 可能需要稍微不同的 GetService 实现。

标签: visual-studio-2010 visual-studio visual-studio-addins build-events error-list


【解决方案1】:

Ryan Molden (MSFT) 说:

Package.GetGlobalService 依赖于至少一个 MPF 包(来自 您引用的 MPF 的特定版本)已加载。 因为你自己是一个插件而不是一个包你不能保证 以任何方式。

你应该传递类似 new 的东西 ServiceProvider((Microsoft.VisualStudio.OLE.Interop.IServiceProvider))) 作为 ErrorListProvide 的参数

Package.GetGlobalService 正在返回 null。

我在我的插件中使用此代码。我对其进行了测试并且没有出错,并且可以在 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");

            }
        }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-06
    • 1970-01-01
    • 2019-11-06
    • 1970-01-01
    • 1970-01-01
    • 2020-02-26
    • 2016-12-09
    • 2015-02-16
    相关资源
    最近更新 更多