格式化自定义工具的输出,以便我可以在Visual Studio中双击错误并打开文件
我编写了一个命令行工具,它预处理了许多文件,然后使用CodeDom编译它们。 该工具将版权声明和一些进度文本写入标准输出,然后使用以下格式从编译步骤中写入任何错误:
foreach (var err in results.Errors) { // err is CompilerError var filename = "PathToinput_file.xprt"; Console.WriteLine(string.Format( "{0} ({1},{2}): {3}{4} ({5})", filename, err.Line, err.Column, err.IsWarning ? "" : "ERROR: ", err.ErrorText, err.ErrorNumber)); }
然后它写入错误的数量,如“14个错误”。
这是错误如何出现在控制台中的示例:
PathToinput_file.xrpt (73,28): ERROR: An object reference is required for the non-static field, method, or property 'Some.Object.get' (CS0120)
当我在VS2008中将其作为自定义工具运行时(通过在我的项目程序集之一的后期构建事件命令行中调用它),错误在错误列表中显示格式很好,每列中都有正确的文本。 当我翻转文件名时,会弹出完全限定的路径。 行和列与源文件不同,因为预处理很好。 唯一突出的是列表中给出的项目是具有后期构建事件的项目。
问题是,当我双击错误时,没有任何反应。 我原本希望文件在编辑器中打开。
我很清楚地知道Microsoft.VisualStudio.Shell.Interop
命名空间,但我认为应该可以通过写入标准输出来实现。
编辑 :我注意到了一些问题,并自己解决了这个问题:
执行此操作的标准方法是将您的工具实现为MSBuild Task
,然后您可以访问Log
对象:
Log.LogError(subcategory, errorCode, helpKeyword, file, lineNumber, columnNumber, endLineNumber, endColumnNumber, message, messageArgs);
例如,这是Gendarme / Visual Studio集成的工作原理。 此外,这使您可以更轻松地将工具添加到项目文件中(只需在
删除任务
完成)。
如果您不想这样做,那么请确保您的工具输出完全符合Visual Studio的预期: http : //blogs.msdn.com/b/msbuild/archive/2006/11/03/msbuild-视觉工作室感知错误的消息和消息,formats.aspx
一个重要的“问题”是文件路径应该作为绝对路径输出,否则Visual Studio可能会错误地扩展它们。
由于我在工具中输出相对路径,因此Visual Studio使用调用项目的路径形成文件的绝对路径,这意味着生成的绝对路径不存在。 解决方案是简单地输出源文件的绝对路径。
上述就是C#学习教程:格式化自定义工具的输出,以便我可以在Visual Studio中双击错误并打开文件分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1039354.html