【问题标题】:How can I get the Error Code from Error List in VS 2015/2017 with DTE? Or other ways can get error code?如何使用 DTE 从 VS 2015/2017 的错误列表中获取错误代码?或者其他方式可以获得错误代码?
【发布时间】:2017-01-16 02:32:35
【问题描述】:

我想在 Visual Studio 2015/2017 中扩展错误列表,我只使用 DTE 可以获得 ErrorItem,但是 ErrorItem 不包含 ErrorCode,如下所示,我怎样才能获得错误代码?提前致谢!

【问题讨论】:

    标签: c# visual-studio-2015 envdte


    【解决方案1】:

    是的,我也有这个。提供帮助可能为时已晚,但请继续:

        var errorList = _dte.ToolWindows.ErrorList as IErrorList;
        // placed in dictionary for easy access later
        var entries = (errorList?.TableControl.Entries ?? Enumerable.Empty<ITableEntryHandle>())
            .Select((e, i) => new { Entry = e, Index = i + 1 })
            .ToDictionary(it => it.Index, it => it.Entry);
    
        var errors = errorList.ErrorItems;
        for (int i = 1; i <= errors.Count; i++)
        {
            ErrorItem error = errors.Item(i);
            entries[i].TryGetValue("errorcode", out var errorCode);
            var item = new
            {
                error.Column,
                error.Description,
                error.ErrorLevel,
                error.FileName,
                error.Line,
                error.Project,
                Code = errorCode
            };
        }
    

    【讨论】:

    • 此代码不适用于 2019 年。对象模型是否更改? dte.ToolWindows.ErrorList 不实现 IErrorList。你有解决方案吗? TY
    • 1) 从 VS 2019 16.8.3 开始,调试器显示 dte.ToolWindows.ErrorList 的 System.Type 是包 C:\Program Files ( x86)\Microsoft Visual Studio\2019\\Common7\IDE\CommonExtensions\Microsoft\ErrorList\Microsoft.VisualStudio.ErrorListPkg.dll
    • 2) 使用 ILSpy,您可以看到该类继承自抽象类 Microsoft.VisualStudio.ErrorListPkg.Shims.ErrorList,后者又实现了多个接口,其中 Microsoft.VisualStudio.Shell.IErrorList 来自程序集 Microsoft .VisualStudio.Shell.Framework,版本=16.0.0.0。所以,dte.ToolWindows.ErrorList 实现 IErrorList 是毫无疑问的。
    • 3) 事实上,我已经验证,如果在一个包中,如果你得到 dte 实例(正确)调用 base.GetService(typeof(EnvDTE.DTE)) 作为 EnvDTE80.DTE2 来自 dte 的演员表。 ToolWindows.ErrorList 到 IErrorList 确实有效。
    • 4) 这给我们带来了如何获取 DTE 实例的问题,因为如果您获取不正确(例如,通过某些自动化 GetObject 和表亲)它就不起作用(不同的把我带到这个线程的场景)。
    猜你喜欢
    • 1970-01-01
    • 2013-10-17
    • 2018-07-28
    • 2018-11-16
    • 2020-09-18
    • 1970-01-01
    • 2013-01-30
    • 1970-01-01
    • 2015-11-04
    相关资源
    最近更新 更多