visual-studio-2010 - 每次构建前清除 "Error List"警告的 Visual Studio 2010 插件/代码

标签 visual-studio-2010 add-in visual-studio-addins error-list

VS2010 快把我逼疯了:每当我重建时, “错误列表”警告 来自先前编译的持久化,任何新的警告都简单地添加到列表的末尾。随着时间的推移,这个列表变得非常冗长和笨拙。

我正在使用 叽叽喳喳 2.0 运行工具 JSHint JSLint 在我的 JS 文件上,这些工具会产生很多误报。

我一直在寻找一种简单的方法来 清除此窗口的内容 ,但唯一可以 100% 工作的手动机制是关闭并重新打开解决方案。不是很优雅。

我想编写一个小的 VS 插件或在编译之前调用的一些代码以清除此列表,这样我就可以只关注当前加载的文件的新警告。

我看到一个 .清除()输出窗口的方法,但不是错误列表的方法。这是可行的吗?

最佳答案

曾几何时,我是一个加载项/VSIX 包/MEF 开发人员...

答案很快是否定的,但我必须长期这样做:

加载项、包(托管或非托管)可以分别访问 VS 服务级别。每个错误都属于报告者(如果他们像 Chirpy 那样管理它们),因此您无法处理由 Chirpy 2.0 创建的错误

我仔细看了一下它的源代码,它坚持它是由名为 TaskList 的 Singleton 集合中的工具获得的。

在最新版本中,通过 RemoveAll 方法在多个代码点中删除了集合元素:

  • 第一:解决方案关闭后。
  • 通过这个:
  • private static string[] buildCommands = new[] { "Build.BuildSelection", "Build.BuildSolution", "ClassViewContextMenus.ClassViewProject.Build" };
        private void CommandEvents_BeforeExecute(string guid, int id, object customIn, object customOut, ref bool cancelDefault) {
                EnvDTE.Command objCommand = default(EnvDTE.Command);
                string commandName = null;
    
                try {
                    objCommand = this.App.Commands.Item(guid, id);
                } catch (System.ArgumentException) {
                }
    
                if (objCommand != null) {
                    commandName = objCommand.Name;
    
                    var settings = new Settings();
                    if (settings.T4RunAsBuild) {
                        if (buildCommands.Contains(commandName)) {
                            if (this.tasks != null) {
                                this.tasks.RemoveAll();
                            }
    
                            Engines.T4Engine.RunT4Template(this.App, settings.T4RunAsBuildTemplate);
                        }
                    }
                }
            }
    

    如您所见,清除结果取决于许多事情。
    首先是设置(我不知道在 GUI 或配置上设置的位置,但似乎从复选框中获取它的值)。
    其次,不包含每个构建命令名称的名称数组。

    所以我看到了一个解决方案,但只是在从 Chirpy 修改和重建/重新部署您自己的版本(并提出拉取请求)的路上:

    代码不依赖于命令及其名称。 (例如缺少重建)

    您可以像这样更改上面的方法:
    this.eventsOnBuild.OnBuildBegin += ( scope, action ) =>
    {
        if (action != vsBuildAction.vsBuildActionDeploy)
        {
            if (this.tasks != null)
            {
                this.tasks.RemoveAll();
            }
    
            if (settings.T4RunAsBuild && action != vsBuildAction.vsBuildActionClean)
            {
               Engines.T4Engine.RunT4Template(this.App, settings.T4RunAsBuildTemplate);
            }
        }
    };
    

    或者使用等效的处理程序方法而不是 lambda 表达式。
    您应该将其放入 Chirp 类的订阅 OnStartupComplete 方法中。

    取消订阅必须放在同一个类的 OnDisconnection 方法中。 (至于所有其他订阅的处理程序......)

    更新:

    当插件断开连接时,并不意味着工作室将立即关闭。可以卸载加载项。所以你也应该从 OnDisconneconnection 调用 RemoveAll。 (或删除并处置任务列表...)

    更新 2:

    您还可以制作自定义命令,并将其绑定(bind)到热键。

    关于visual-studio-2010 - 每次构建前清除 "Error List"警告的 Visual Studio 2010 插件/代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7733912/

    相关文章:

    vb.net - VB Visual Studio 不更新 bin/debug 文件夹

    c - Win32 控制台项目问题

    c# - 如何创建和管理构建服务器?

    asp.net-mvc - ASP.Net MVC 3中的多项目区域

    c# - Outlook 插件部署线程

    c# - 是否可以在 visual studio 2010 Express 中集成远程调试器?

    visual-studio-2010 - 扩展 Visual Studio 2010 C# Intellisense?

    c# - 监控 C# 方法性能的工具

    c# - 在 Visual Studio 上打开自定义工具窗口,而不从“ View ”菜单调用它

    visual-studio - VS2008 : Highlight several words in different colors simultaneously - Possible as plug-in?