compiler-construction - 在Visual Studio 2013中写入输出构建 Pane +错误列表,无需双击即可使用msbuild/new进程双击条目以出错

标签 compiler-construction compiler-errors msbuild visual-studio-2013 visual-studio-extensions

我使用的是自定义生成工具,我从正在创建的Visual Studio 2013扩展包中将其作为dll调用,我想从此工具返回的字符串输出进行解析,以获取错误,行号等信息。并将其输出到构建 Pane +错误列表,并具有双击该错误的功能,可以转到文件中的源位置。

目前,我可以将信息输出到 Pane 和错误列表中,但是双击源功能在输出列表或错误列表中均不起作用(在输出窗口中单击字符串时,其作用类似于文本中的普通文本)文件)。

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

如果我将我的工具作为外部流程运行到stdout,则输出到 Pane 的效果很好,但错误列表中没有任何内容。

       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();

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

关于compiler-construction - 在Visual Studio 2013中写入输出构建 Pane +错误列表,无需双击即可使用msbuild/new进程双击条目以出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23322295/

相关文章:

java - 在 Maven 构建期间优化 Java 编译器?

C# 编译器不识别类似的 yield return 方法?

c++ - 对象/结构等的 C++ 内存布局是什么?

c - 摆脱IAR编译警告Pa039? “use of address of unaligned structure member”

asp.net-mvc - allowDefinition ='MachineToApplication' 错误设置 <MvcBuildViews>true</MvcBuildViews>

c++ - C++ 中的 Lua 转储

斯卡拉错误 : "forward reference extends over definition of value" when code appears in a function

linux - Ndless makefile/make 安装错误linux

c# - 我的 Visual Studio 2019 WPF 应用程序在它应该是 exe 时将 dll 设置为输出

msbuild - 为什么 aspnet_compiler 需要对构建服务器上的 Temporary ASP.NET Files 文件夹的写访问权限?