首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DebuggerVisualizer在调试时不显示,但在测试应用程序上可用

DebuggerVisualizer在调试时不显示,但在测试应用程序上可用
EN

Stack Overflow用户
提问于 2017-10-25 22:02:43
回答 1查看 72关注 0票数 1

我已经制作了一个DebuggerVisualizer来显示一个抽象的Puzzy类的简单图像--我遇到的问题是,在我的测试应用程序中,它只是创建了一个游戏并调用TestShowVisualizer(),图像在屏幕上正确显示。但是,当调试项目并将鼠标悬停在变量上时,没有可视化工具(或放大镜图标)

代码语言:javascript
复制
    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();
    }
}

我制作了一个测试应用程序,所有制作可视化工具的示例也都使用它:

代码语言:javascript
复制
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中

知道我哪里做错了吗?

EN

回答 1

Stack Overflow用户

发布于 2017-10-26 16:40:15

我找到了原因,因为DebuggerVisualizer属性需要应用于命名空间,而不是类。

所以

代码语言:javascript
复制
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之前:

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46934529

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档