让VS 2010在调试字符串时,支持Json数据格式友好显示
阅读本文如果对Microsoft.VisualStudio.DebuggerVisualizers的用法不熟悉的,可以参考这篇文章。http://www.cnblogs.com/devil0153/archive/2010/09/01/Visual-Studio-Custom-Debugger.html
一、 背景介绍及JsonView
由于吾所在的项目中对外开放接口,数据接受和传送都是字符串Json格式,在调试接口阶段,会查看传输数据的内容,如果不经过格式化处理,用肉眼看起来比较费劲和不够直观,经常要把它Copy&Paste到一个Json查看器里,这种操作太多了,就会感到麻烦和繁琐。
之前用过那个Linq可视化工具,挺好用的,所以就联想到应该也有这么一个JsonViewer的工具,Google一下,果然找到了JsonViewer,就下载了这个源码,源码结构如下:
其中JsonVisualizer就是我需要的东西,我直接编译,然后把JsonViewer.dll、JsonVisualizer.dll、Newtonsoft.Json.dll三个文件全部复制,到Vs2010的安装目录"Microsoft Visual Studio 10.0\Common7\Packages\Debugger\Visualizers"下。
二、 调试运行
F5调试
调试状态下,点击那个放大镜旁边的三角向下箭头,可以看到有个JSON选项,点击它,我这里报错了。
************** Exception Text **************
System.InvalidCastException: Unable to cast object of type 'EPocalipse.Json.Visualizer.JsonVisualizer' to type 'Microsoft.VisualStudio.DebuggerVisualizers.DialogDebuggerVisualizer'.
at Microsoft.VisualStudio.DebuggerVisualizers.DebugViewerShim.ManagedShim.DelegatedHost.CreateViewer(IntPtr hwnd, HostServicesHelper hsh, SafeProxyWrapper proxy)
再看详细报错信息
----------------------------------------
Microsoft.VisualStudio.DebuggerVisualizers
Assembly Version: 10.0.0.0
Win32 Version: 10.0.30319.1
CodeBase: file:///C:/Windows/assembly/GAC_MSIL/Microsoft.VisualStudio.DebuggerVisualizers/10.0.0.0__b03f5f7f11d50a3a/Microsoft.VisualStudio.DebuggerVisualizers.dll
----------------------------------------
JsonVisualizer
Assembly Version: 1.0.0.0
Win32 Version: 1.0.0.0
CodeBase: file:///D:/Program%20Files/Microsoft%20Visual%20Studio%2010.0/Common7/Packages/Debugger/Visualizers/JsonVisualizer.dll
----------------------------------------
Microsoft.VisualStudio.DebuggerVisualizers
Assembly Version: 11.0.0.0
Win32 Version: 11.0.50727.1
CodeBase: file:///C:/Windows/assembly/GAC_MSIL/Microsoft.VisualStudio.DebuggerVisualizers/11.0.0.0__b03f5f7f11d50a3a/Microsoft.VisualStudio.DebuggerVisualizers.dll
----------------------------------------
Microsoft.VisualStudio.DebuggerVisualizers加载了两次,因为我电脑上同时安装了VS 2010和VS 2012,看了一下JsonVisualizer项目里Microsoft.VisualStudio.DebuggerVisualizers的引用,确实引用的是VS 2012的,只要删掉重新引用为VS 2010的即可。
然后就能正常运行了。
三、后记
我在想如果要让VS 2012也支持的话,恐怕还要重新引用对应于VS 2012的Microsoft.VisualStudio.DebuggerVisualizers,再把编译后的三个dll文件放到VS 2012对应的目录下。