手动调用 Visual Studio 的可视化工具

Posted

技术标签:

【中文标题】手动调用 Visual Studio 的可视化工具【英文标题】:Invoking Visual Studio's visualizer manually 【发布时间】:2011-11-29 08:47:52 【问题描述】:

场景

我一直在尝试从代码/立即窗口,到目前为止没有任何运气。

我用以下代码编写了一个简单的控制台应用程序:

var dataset = new System.Data.DataSet();

然后我将 dataset 添加到 Watch Window 并使用 DataSet Visualizer 将其可视化。正如预期的那样,这奏效了。

完成后,我在即时窗口中输入了以下代码:

new Microsoft.VisualStudio.DebuggerVisualizers.VisualizerDevelopmentHost(dataset, typeof(EnhancedDataSetVisualizer.DataSetVisualizer)).ShowVisualizer();

导致以下异常 (full exception):

System.IO.FileNotFoundException: Could not load file or assembly 'Microsoft.VisualStudio.Debugger.DataSetVisualizer, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The system cannot find the file specified.
File name: 'Microsoft.VisualStudio.Debugger.DataSetVisualizer, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'
   at System.Reflection.Assembly._nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, 
….

这对我来说真的很奇怪,因为如果我在 Visual Studio 中查看 Debug->Widnow->Modules,我会发现 DataSetVisualizer.dll 已经加载:

Microsoft.VisualStudio.Debugger.DataSetVisualizer.dll   C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\Packages\Debugger\Visualizers\Microsoft.VisualStudio.Debugger.DataSetVisualizer.dll No  No  Cannot find or open the PDB file.       18  10.0.30319.1    18/03/2010 12:06 PM 77AB0000-77AC2000   [6784] PresentingBugAid.vshost.exe: Managed (v2.0.50727)    

然而,它尝试加载它,但失败了。我试图检查融合日志(full log):

…
file:///C:/SVN/Debugger/src/Test/PresentingMyTest/PresentingMyTest/bin/Debug/Microsoft.VisualStudio.Debugger.DataSetVisualizer.DLL.
LOG: Attempting download of new URL 
...

为了尝试,我将 Microsoft.VisualStudio.Debugger.DataSetVisualizer.dll 复制到 c:\SVN\Debugger\src\Test\PresentingMyTest\PresentingMyTest\bin\Debug \ 然后重试上述方案。这一次它似乎工作了,可视化出现了,然而,它冻结了整个应用程序。此外,再次尝试不再显示可视化。

事后思考

一段时间后我意识到我所做的可能很奇怪 - Visual Studio 的可视化工具设计为在调试器的进程 (devenv.exe) 中运行,然而,就我而言,我一直试图强制加载可视化工具被调试者(PresentingMyTest.exe)。虽然它没有解释为什么它试图加载 Microsoft.VisualStudio.Debugger.DataSetVisualizer.dll 即使它已加载,但我想它解释了为什么它不能正常工作。

我考虑尝试的另一个解决方案是完全跳过 VisualizerDevelopmentHost,而是直接通过反射调用 DataSetVisualizer 的 Show 方法,这是任何可视化都必须具备的方法。这是个好主意吗?

我意识到整个场景都没有得到支持,但它对我的项目来说非常重要,我很高兴听到我可以尝试使其发挥作用的其他想法和事情。

谢谢!

【问题讨论】:

【参考方案1】:

也许可以使用“Microsoft.VisualStudio.DebuggerVisualizers.VisualizerDevelopmentHost”类型和特定的ShowVisualizer() 方法?我没有时间玩可视化调试器,所以这只是一个疯狂的猜测。

【讨论】:

这正是我在问题中试图做的:) 见上文:new Microsoft.VisualStudio.DebuggerVisualizers.VisualizerDevelopmentHost(dataset, typeof(EnhancedDataSetVisualizer.DataSetVisualizer)).ShowVisualizer();

以上是关于手动调用 Visual Studio 的可视化工具的主要内容,如果未能解决你的问题,请参考以下文章

Visual Studio怎么翻译?

手动修改Visual Studio 版本互转工具

类似于 Mole 的 Visual Studio 可视化工具 [关闭]

为 JsonCpp 寻找 Visual Studio 可视化工具(natvis)

如何为 Visual Studio 2012 调试器编写自定义本机可视化工具 DLL?

DataTable可视化工具从我的Visual Studio中消失了