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

Vit*_*lyB 5 .net c# visual-studio

脚本

我一直试图从代码/即时窗口手动调用Visual Studio的可视化工具,到目前为止没有任何运气.

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

var dataset = new System.Data.DataSet();
Run Code Online (Sandbox Code Playgroud)

然后我将数据集添加到监视窗口并使用DataSet Visualizer将其可视化.正如所料,这是有效的.

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

new Microsoft.VisualStudio.DebuggerVisualizers.VisualizerDevelopmentHost(dataset, typeof(EnhancedDataSetVisualizer.DataSetVisualizer)).ShowVisualizer();
Run Code Online (Sandbox Code Playgroud)

这导致以下异常(完全异常):

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, 
….
Run Code Online (Sandbox Code Playgroud)

这对我来说真的很奇怪,因为如果我在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)    
Run Code Online (Sandbox Code Playgroud)

然而,它试图加载它,并失败.我试图检查融合日志(完整日志):

…
file:///C:/SVN/Debugger/src/Test/PresentingMyTest/PresentingMyTest/bin/Debug/Microsoft.VisualStudio.Debugger.DataSetVisualizer.DLL.
LOG: Attempting download of new URL 
...
Run Code Online (Sandbox Code Playgroud)

只是为了尝试我将Microsoft.VisualStudio.Debugger.DataSetVisualizer.dll复制到c:\ SVN\Debugger\src\Test\PresentingMyTest\PresentingMyTest\bin\Debug \然后重试上面的场景.这次似乎工作,可视化出现了,但它冻结了整个应用程序.而且,再次尝试它不再显示可视化.

后记

过了一段时间我意识到我所做的可能很奇怪 - Visual Studio的Visualizer被设计为在调试器的进程(devenv.exe)中运行,但在我的情况下,我一直试图强制可视化器加载到调试对象中( PresentingMyTest.exe).虽然它没有解释为什么它试图加载Microsoft.VisualStudio.Debugger.DataSetVisualizer.dll,即使它已加载,我想它解释了为什么它一般不起作用.

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

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

谢谢!

wał*_*nok 0

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