Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
创建在所有对象上运行的C#VS2010可视化工具_C#_Visual Studio 2010_Visualizer - Fatal编程技术网

创建在所有对象上运行的C#VS2010可视化工具

创建在所有对象上运行的C#VS2010可视化工具,c#,visual-studio-2010,visualizer,C#,Visual Studio 2010,Visualizer,我正在尝试创建一个C#调试可视化工具,它可以对所有对象执行可视化。我似乎无法获得assembly属性(位于名称空间上方)以将此可视化工具绑定到System.Object,就像我能够与系统中的其他对象绑定一样。我已经搜索了很长时间,但没有找到任何关于为所有对象创建可视化工具的示例/讨论。这是我正在尝试使用的代码,当绑定到String或Int32时,它可以很好地工作,但不能绑定到Object或Object [assembly: System.Diagnostics.DebuggerVisualize

我正在尝试创建一个C#调试可视化工具,它可以对所有对象执行可视化。我似乎无法获得assembly属性(位于名称空间上方)以将此可视化工具绑定到System.Object,就像我能够与系统中的其他对象绑定一样。我已经搜索了很长时间,但没有找到任何关于为所有对象创建可视化工具的示例/讨论。这是我正在尝试使用的代码,当绑定到String或Int32时,它可以很好地工作,但不能绑定到Object或Object

[assembly: System.Diagnostics.DebuggerVisualizer(
typeof(Visualizers.ObjectVisualizer), typeof(Visualizers.RawObjectScource),
Target = typeof(object), Description = "Object Visualizer")]
namespace Visualizers
{
public class ObjectVisualizer : DialogDebuggerVisualizer
{
    override protected void Show(IDialogVisualizerService windowService, IVisualizerObjectProvider objectProvider)
    {
        Console.Out.WriteLine("InShow");
        MessageBox.Show(objectProvider.GetObject().ToString());
    }
}

// handle any object, doesn't require that it's Serializable
public class RawObjectScource : VisualizerObjectSource
{
    public override void GetData(object target, Stream outgoingData)
    {
        if (target != null)
        {
            BinaryFormatter formatter = new BinaryFormatter();
            formatter.Serialize(outgoingData, target.ToString());
        }
    }
}
}
作为使用IntelliJ的前Java程序员,我习惯于在调试模式下看到特定引用指向的堆地址。这使您可以一目了然地看到两个对象是否相等。此外,还有一些其他有价值的事情需要了解,但要解释可能会有点冗长。如果我能让它工作,我会张贴最后的代码


那么,有人知道如何使可视化工具对所有对象都处于活动状态吗?

我不知道您的代码出了什么问题。 但是@Bismark,目标不必能够序列化,因为您可以使用自己的
VisualizationRobjectSource
对其进行序列化


我建议您将
.GetType().AsseblyQualifierName
与它一起序列化,这将允许您确定流包含什么类型的对象,因此在反序列化时,您知道您的对象实际上是类
x
的实例,我在自己的可视化工具中使用了这种技术,因为有时您可能正在序列化类的一个子类型,而在反序列化时,您不知道正在使用的是什么时间。

为什么您需要知道assembly system.object所在的位置?我看不出您显然在哪里引用程序集。抱歉,我应该使用属性not reference,editing。如果您需要比较两个相等的对象,只需使用调试器监视窗口,在其中输入变量名称,然后从每个变量的弹出菜单中执行“生成对象ID”。如果它们具有相同的对象id,则表示它们指向相同的对象引用。如果我错了,请更正我,但
DebuggerVisualizer
Target
属性不应指向可序列化的数据类型?