Compiler construction 写入输出生成窗格+;Visual Studio 2013中的错误列表,可以双击条目转到错误,而无需使用msbuild/new process

Compiler construction 写入输出生成窗格+;Visual Studio 2013中的错误列表,可以双击条目转到错误,而无需使用msbuild/new process,compiler-construction,compiler-errors,msbuild,visual-studio-2013,visual-studio-extensions,Compiler Construction,Compiler Errors,Msbuild,Visual Studio 2013,Visual Studio Extensions,我正在使用一个自定义构建工具,我在创建的Visual Studio 2013扩展包中将其作为dll调用,我希望获取此工具返回的字符串输出,分析错误,行号等,并将其输出到生成窗格+错误列表,完成双击以转到错误文件中的源位置的功能 目前,我可以将信息输出到窗格和错误列表,但双击转到源代码功能在输出或错误列表中都不起作用(在输出窗口中单击字符串时,它的行为与文本文件中的普通文本类似) 下面的代码是我尝试使用OutputAsKitemString将测试错误写入构建窗格/错误列表的代码。我相信字符串的格式

我正在使用一个自定义构建工具,我在创建的Visual Studio 2013扩展包中将其作为dll调用,我希望获取此工具返回的字符串输出,分析错误,行号等,并将其输出到生成窗格+错误列表,完成双击以转到错误文件中的源位置的功能

目前,我可以将信息输出到窗格和错误列表,但双击转到源代码功能在输出或错误列表中都不起作用(在输出窗口中单击字符串时,它的行为与文本文件中的普通文本类似)

下面的代码是我尝试使用OutputAsKitemString将测试错误写入构建窗格/错误列表的代码。我相信字符串的格式是正确的,VisualStudio可以解析“错误感知”功能

如果我将我的工具作为一个外部进程运行,打印到标准输出,那么输出到窗格可以正常工作,但是我在错误列表中没有得到任何东西

       var outputWindow = GetService(
            typeof(SVsOutputWindow)) as IVsOutputWindow;
        IVsOutputWindowPane pane;
        Guid guidGeneralPane =
            VSConstants.GUID_BuildOutputWindowPane;
        outputWindow.GetPane(ref guidGeneralPane, out pane);

        pane.Activate();

        pane.OutputTaskItemString("I:\\LLVM_BUILD\\VC12\\64\\Release\\bin\\test.cpp(12,2) :  error: void function 'functionTest' should not return a value [-Wreturn-type] return 0;", VSTASKPRIORITY.TP_HIGH, VSTASKCATEGORY.CAT_BUILDCOMPILE,
            "Error", (int)Microsoft.VisualStudio.Shell.Interop._vstaskbitmap.BMP_COMPILE, "I:\\LLVM_BUILD\\VC12\\64\\Release\\bin\\test.cpp", 12, "error: void function 'functionTest' should not return a value [-Wreturn-type] return 0");

        pane.FlushToTaskList();

关于这个主题还有其他一些问题,但没有一个给出了我具体要做的事情的解决方案(“无msbuild或触发外部进程的错误感知”生成输出)

结果表明,我所需要的只是输出字符串中的换行符。还要注意,错误行是基于0的数组,因此0=行1

            pane.OutputTaskItemString("I:\\LLVM_BUILD\\VC12\\64\\Release\\bin\\test.cpp(12,2) :  error: void function 'functionTest' should not return a value [-Wreturn-type]\n return 0;\n", VSTASKPRIORITY.TP_HIGH, VSTASKCATEGORY.CAT_BUILDCOMPILE,
            "Error", (int)Microsoft.VisualStudio.Shell.Interop._vstaskbitmap.BMP_COMPILE, "I:\\LLVM_BUILD\\VC12\\64\\Release\\bin\\test.cpp", 11, "error: void function 'functionTest' should not return a value [-Wreturn-type] return 0");

        pane.FlushToTaskList();

这样,您应该可以在输出窗格和错误列表中获得可单击的错误(显然,您需要自己解析每次调用OutputAsKitemString的错误信息)。

在Vsix项目中,如何处理输出窗口行双击到编辑器导航。帮助我的Vsix项目,如何处理输出窗口行双击编辑器导航。帮助我