Dziś będzie o tym atrybucie i co za jego pomocą możemy uczynić.

Często debuggujemy nasze aplikacje i często używamy możliwości ‘podejrzenia’ co dana zmienna zawiera. Niestety w przypadku bardziej skomplikowanych typów to co oferuje nam domyślnie VS nie jest wystarczające.

Weźmy dla przykłady bitmapy. To co mamy domyślnie wygląda mniej więcej tak:

Pełno danych, ale tak naprawdę, nie mówią one mam tego najważniejszego. Jak ta bitmapa wygląda. O ile lepiej nam by się żyło, gdybyśmy mogli (oczywiście nadal zachowując możliwość wyświetlenia wszystkich właściwości i zmiennych) zobaczyć taki obraz:

Wbrew pozorom nie jest to wcale takie trudne. Wszystko dzięki atrybutowi DebuggerVisualizer oraz klasie DialogDebuggerVisualizer. Ale po kolei:

Żeby stworzyć taki Visualizer, wystarczy, że utworzymy projekt typu ClassLibrary. A następnie dziedziczmy naszą klasę z DialogDebuggerVisualizer:

public class BitmapVisualizerDialog : DialogDebuggerVisualizer

{

}

Klasa ta jest abstrakcyjna i wymaga od nas napisania ciała dla metody Show. W niej robimy to co chcemy.

var item = objectProvider.GetObject();

var i = (Image) item;

var form = new CompareBitmapDialog {Image = i};

form.ShowDialog();

Gdzie CompareBitmapDialog to zwykła forma z PictureBox’em. Pominę to jak to zrobić. Myślę, że każdy będzie to potrafił.

Na koniec musimy powiedzieć jeszcze jakiego typu/-ów dotyczy ten Vizualizer. Robimy to, wspomnianym w tytule atrybutem, DebuggerVisualizer.

[assembly: DebuggerVisualizertypeof(BitmapVisualizerDialog),                               

                                Target = typeof(Bitmap))]

 

[assembly: DebuggerVisualizertypeof(BitmapVisualizerDialog),                               

                                Target = typeof(Image))]

W zasadzie już wszystko. Pozostał jeszcze deployment. Sprowadza się on do skopiowania naszego wynikowego pliku .dll do odpowiedniego folderu.

\Common7\Packages\Debugger\Visualizers

lub

My Documents\Visual Studio\Visualizers

w zależności czy chcemy, aby dostęp mieli wszyscy czy tylko dany użytkownik. Po restarcie Visual Studio przy Bitmapach pojawi się mała lupka:

Klikając na nią uruchamiamy nasz Vizualizer.