2017-10-25 1 views
0

Ich habe einen DebuggerVisualizer erstellt, um ein einfaches Bild einer abstrakten Puzzleklasse zu zeigen - das Problem ist, dass in meiner Testanwendung einfach ein Puzzle erstellt wird und TestShowVisualizer aufgerufen wird() Das Bild wird korrekt auf dem Bildschirm angezeigt. Allerdings, wenn das Projekt Debuggen und über die Variable schwebt gibt es keine Visualizer (oder Lupensymbol)DebuggerVisualizer wird nicht beim Debuggen angezeigt, arbeitet aber an der Testanwendung

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(); 
    } 
} 

Ich habe eine Testanwendung, die alle Beispiele für visualizers Herstellung zu verwenden:

public class Program 
{ 
    public static void Main(string[] args) 
    { 
     var p = new Cube222(); 
     p.Setup(); 
     PuzzleVisualizer.TestShowVisualizer(p); 
     return; 
    } 
} 

Die Visualizer funktioniert, wenn TestShowVisualizer() aufgerufen wird, aber nicht nur für das allgemeine Debugging.

Ich habe dafür gesorgt, dass die Visualizer-Klasse in ihrem eigenen DLL ist und dass dies auf C kopiert wird: \ Programme \ Microsoft Visual Studio \ 2017 \ Gemeinschaft \ Common7 \ Packages Debugger \ Visualizer \

Beliebig Ideen, was ich falsch mache?

+1

Sie setzen das [Attribut] auf der falschen Klasse. Die Puzzle-Klasse braucht es, nicht die Visualizer-Klasse. –

Antwort

0

Ich fand den Grund dafür, es war, weil das DebuggerVisualizer Attribut auf den Namespace nicht die Klasse angewendet werden muss.

So

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 
     } 
    } 
} 

las ich das Tutorial und es klar ist, aber ich es irgendwie verpasst.

Fügen Sie den folgenden Attributcode zu DebuggerSide.cs, nachdem die Verwendung von Aussagen aber vor Namespace MyFirstVisualizer:

Verwandte Themen