我已经制作了一个DebuggerVisualizer来显示一个抽象的Puzzy类的简单图像--我遇到的问题是,在我的测试应用程序中,它只是创建了一个游戏并调用TestShowVisualizer(),图像在屏幕上正确显示。但是,当调试项目并将鼠标悬停在变量上时,没有可视化工具(或放大镜图标)
public abstract class Puzzle
{
// Lots of properties and methods here //
public static Puzzle Load(StreamReader sr)
{
// Reads the stream reader and creates the correct derived class
}
public abstract Image GenerateNet();
}
[DebuggerVisualizer(typeof(PuzzleVisualizer), typeof(PuzzleVisualizerObjectSource), Description = "Image Visualizer", Target = typeof(Puzzle))]
public class PuzzleVisualizer : DialogDebuggerVisualizer
{
protected override void Show(IDialogVisualizerService windowService, IVisualizerObjectProvider objectProvider)
{
var puz = Puzzle.Load(new StreamReader(objectProvider.GetData()));
var image = puz.GenerateNet();
var form = new Form
{
Text = $"Width: {image.Width}, Height: {image.Height}",
ClientSize = new Size(image.Width, image.Height),
FormBorderStyle = FormBorderStyle.FixedToolWindow
};
var pictureBox = new PictureBox
{
Image = image,
Parent = form,
Dock = DockStyle.Fill
};
windowService.ShowDialog(form);
}
public static void TestShowVisualizer(object objectToVisualize)
{
var visualizerHost = new VisualizerDevelopmentHost(objectToVisualize, typeof(PuzzleVisualizer), typeof(PuzzleVisualizerObjectSource));
visualizerHost.ShowVisualizer();
}
}我制作了一个测试应用程序,所有制作可视化工具的示例也都使用它:
public class Program
{
public static void Main(string[] args)
{
var p = new Cube222();
p.Setup();
PuzzleVisualizer.TestShowVisualizer(p);
return;
}
}可视化工具在调用TestShowVisualizer()时工作,但不仅仅用于一般调试。
我已确保可视化工具类位于其自己的DLL中,并将其复制到C:\Program Files\Microsoft Visual Studio\2017\Community\Common7\Packages\Debugger\Visualizers中
知道我哪里做错了吗?
发布于 2017-10-26 16:40:15
我找到了原因,因为DebuggerVisualizer属性需要应用于命名空间,而不是类。
所以
using Microsoft.VisualStudio.DebuggerVisualizers;
using PuzzleExplorer.Visualizers;
[assembly:DebuggerVisualizer(typeof(PuzzleVisualizer), typeof(PuzzleVisualizerObjectSource), Description = "Puzzle Visualizer", Target = typeof(Puzzle))]
namespace PuzzleExplorer.Visualizers
{
public class PuzzleVisualizer : DialogDebuggerVisualizer
{
protected override void Show(IDialogVisualizerService windowService, IVisualizerObjectProvider objectProvider)
{
// code
}
}
}我读了教程,它确实让我看得很清楚,但不知何故,我错过了它。
将以下属性代码添加到DebuggerSide.cs,在using语句之后但在命名空间MyFirstVisualizer之前:
https://stackoverflow.com/questions/46934529
复制相似问题