首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我无法注册我的DebuggerVisualizer?(在VS2012中)

为什么我无法注册我的DebuggerVisualizer?(在VS2012中)
EN

Stack Overflow用户
提问于 2014-07-15 03:43:34
回答 2查看 58关注 0票数 0

遵循MSDN instructions,我创建了一个定制的DebuggerVisualizer,如下所示:

代码语言:javascript
复制
[assembly: DebuggerVisualizer(
typeof(TestVisualizer.Visualizer1),
typeof(VisualizerObjectSource),
Target = typeof(MyType.SomeType),
Description = "Just a test Visualizer")]
namespace TestVisualizer
{       
    public class Visualizer1 : DialogDebuggerVisualizer
    {
        protected override void Show(IDialogVisualizerService windowService, IVisualizerObjectProvider objectProvider)
        {
            SomeType obj1 = (SomeType)objectProvider.GetObject();
            using (Form displayForm = new Form())
            {
                ... display code here ...
                windowService.ShowDialog(displayForm);
            }
        }
    }
}

其中目标类型在单独的程序集中定义,如下所示:

代码语言:javascript
复制
namespace MyType
{
    [Serializable]
    public class SomeType{... class definition...}
}

TestVisualizer项目将.dll (构建后)复制到所需的目录中:

代码语言:javascript
复制
C:\Users\[username]\Documents\Visual Studio 2012\Visualizers

因此,然后我重新启动Visual Studio,在SomeType对象实例化之后放置断点。但不显示可视化工具(不显示放大镜)。

但是,如果我像这样修饰SomeType类定义:

代码语言:javascript
复制
namespace MyType
{
    [DebuggerVisualizer(typeof(TestVisualizer.Visualizer1))]  //this method works
    [Serializable]
    public class SomeType{... class definition...}
}

一切按预期运行,放大镜出现了。同样,如果我使用VisualizerDevelopmentHost来显示它,它也可以很好地工作,所以可视化工具类本身似乎没有任何问题。我只是似乎没有正确地注册它。

我需要做什么才能让可视化工具在不修改MyType命名空间的情况下工作?

EN

回答 2

Stack Overflow用户

发布于 2014-07-15 05:14:19

您应该将MyType放在单独的程序集中,就像在真实场景中一样,并尝试此版本的属性:

代码语言:javascript
复制
[assembly: DebuggerVisualizer(
    typeof(TestVisualizer.Visualizer1),
    TargetTypeName = "MyType.SomeType, NAMEOFTHEASSEMBLYCONTAININGSOMETYPE",
    Description = "Just a test Visualizer")]

不要忘记将NAMEOFTHEASSEMBLYCONTAININGSOMETYPE替换为程序集的名称(不要使用.dll文件扩展名!)。

票数 1
EN

Stack Overflow用户

发布于 2014-07-15 06:44:14

好吧,我终于解决了我自己的问题。事实证明,我的实际应用程序与我在这里发布的应用程序略有不同。在我最初的应用程序中,SomeType实际上是ISomeType (一个接口)。显然,DebugVisualizers不支持接口(至少不支持我使用的语法)。当我选择一个抽象基类作为我的目标类型时,一切都开始像广告中所说的那样工作。

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

https://stackoverflow.com/questions/24744597

复制
相关文章

相似问题

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