Sdílet prostřednictvím


Návod: Zápis vizualizéru v jazyce C#

Důležité

Počínaje sadou Visual Studio 2022 verze 17.9 je teď možné vizualizéry napsat v .NET 6.0 nebo novějších, které využívají nový model VisualStudio.Extensibility. Autorům vizualizéru doporučujeme odkazovat na novou dokumentaci k vizualizérům ladicího programu sady Visual Studio, pokud nechtějí podporovat starší verze sady Visual Studio nebo chtějí odeslat vlastní vizualizéry jako součást knihovny DLL.

Tento návod ukazuje, jak pomocí jazyka C# napsat jednoduchý vizualizér. Vizualizér, který vytvoříte v tomto názorném postupu, zobrazí obsah řetězce pomocí formuláře Windows. Tento jednoduchý vizualizér řetězců není zvlášť užitečný, ale zobrazuje základní kroky, které je třeba provést, abyste vytvořili užitečnější vizualizéry pro jiné datové typy.

Poznámka:

Zobrazené dialogová okna a příkazy nabídek se můžou lišit od těch, které jsou popsané v nápovědě, v závislosti na aktivním nastavení nebo edici. Pokud chcete změnit nastavení, přejděte do nabídky Nástroje a zvolte Importovat a exportovat Nastavení. Další informace najdete v tématu Resetování nastavení.

Kód vizualizéru musí být umístěn v souboru DLL, který ladicí program čte. Prvním krokem je proto vytvoření projektu knihovny tříd pro knihovnu DLL.

Ruční vytvoření vizualizéru

Dokončete následující úlohy a vytvořte vizualizér.

Vytvoření projektu knihovny tříd

  1. Pokud chcete vytvořit nový projekt knihovny tříd, vyberte Soubor>nový>projekt.

  2. V rozevíracím seznamu jazyka vyberte C#.

  3. Do vyhledávacího pole zadejte knihovnu tříd. Vyberte knihovnu tříd (.NET Framework) a pak vyberte Další.

  4. V dialogovém okně zadejte název MyFirstVisualizera pak vyberte Vytvořit.

V případě projektu vizualizéru se ujistěte, že jste vybrali knihovnu tříd rozhraní .NET Framework, a ne .NET. I když vizualizér musí být .NET Framework, volající aplikace může být .NET.

Po vytvoření knihovny tříd musíte přidat odkaz na Microsoft.VisualStudio.DebuggerVisualizers.DLL soubor, abyste mohli použít třídy definované tam. Než přidáte odkaz, musíte některé třídy přejmenovat, aby používaly smysluplné názvy.

Přejmenování Class1.cs a přidání microsoft.VisualStudio.DebuggerVisualizers

  1. V Průzkumník řešení klikněte pravým tlačítkem na Class1.cs a v místní nabídce vyberte Přejmenovat.

  2. Změňte název z Class1.cs na něco smysluplného, například DebuggerSide.cs.

    Poznámka:

    Visual Studio automaticky změní deklaraci třídy v DebuggerSide.cs tak, aby odpovídala novému názvu souboru. Pokud se zobrazí výzva k dokončení akce, vyberte Ano.

  3. V Průzkumník řešení klikněte pravým tlačítkem myši na Odkazy a v místní nabídce zvolte Přidat odkaz.

  4. V dialogovém okně Přidat odkaz na kartě Procházet vyberte Procházet a vyhledejte Microsoft.VisualStudio.DebuggerVisualizers.DLL.

    Knihovnu DLL najdete v <instalačním adresáři> sady Visual Studio\Common7\IDE\PublicAssemblies podadresáře instalačního adresáře sady Visual Studio.

  5. Vyberte OK.

  6. V DebuggerSide.cs přidejte následující direktivy using :

    using Microsoft.VisualStudio.DebuggerVisualizers;
    

Teď jste připraveni vytvořit kód na straně ladicího programu. Tento kód se spustí v ladicím programu a zobrazí informace, které chcete vizualizovat. Nejprve musíte změnit deklaraci objektu DebuggerSide ke konfiguraci dědičnosti ze základní třídy DialogDebuggerVisualizer.

Dědit z DialogDebuggerVisualizer

  1. V DebuggerSide.cs přejděte na následující řádek kódu:

    public class DebuggerSide
    
  2. Změňte kód na:

    public class DebuggerSide : DialogDebuggerVisualizer
    
  3. Přidejte prázdný konstruktor, abyste mohli předat konstruktoru základní třídy zásadu serializace, která bude použita ke komunikaci mezi komponentami vizualizéru.

    public DebuggerSide() : base(FormatterPolicy.NewtonsoftJson) // or FormatterPolicy.Json
    {
    }
    

    Poznámka:

    Vzhledem k problémům se zabezpečením popsaným v aspektech speciálního ladicího programu pro .NET 5.0+ počínaje sadou Visual Studio 2022 verze 17.11 nebudou vizualizéry moct určit Legacy zásady formátovače.

  4. DialogDebuggerVisualizer má jednu abstraktní metodu (Show), kterou je nutné přepsat.

Přepsání metody DialogDebuggerVisualizer.Show

Do public class DebuggerSidepole přidejte následující metodu:

protected override void Show(IDialogVisualizerService windowService, IVisualizerObjectProvider objectProvider)
{
}

Metoda Show obsahuje kód, který ve skutečnosti vytvoří vizualizér dialogové okno nebo jiné uživatelské rozhraní a zobrazí informace, které byly předány vizualizéru z ladicího programu. Musíte přidat kód, který vytvoří dialogové okno a zobrazí informace. V tomto návodu použijete pole model Windows Forms zprávy. Nejprve musíte přidat odkaz a using direktivu pro System.Windows.Forms.

Přidání System.Windows.Forms

  1. V Průzkumník řešení klikněte pravým tlačítkem myši na Odkazy a v místní nabídce zvolte Přidat odkaz.

  2. V dialogovém okně Přidat odkaz na kartě Procházet vyberte Procházet a vyhledejte System.Windows.Forms.DLL.

    Knihovnu DLL najdete v C:\Windows\Microsoft.NET\Framework\v4.0.30319.

  3. Vyberte OK.

  4. V DebuggerSide.cs přidejte následující direktivy using :

    using System.Windows.Forms;
    

Teď přidáte nějaký kód pro vytvoření a zobrazení uživatelského rozhraní vizualizéru. Vzhledem k tomu, že tato ukázka je vaším prvním vizualizérem, můžete uživatelské rozhraní zachovat jednoduché a používat okno se zprávami.

Zobrazení výstupu vizualizéru v dialogovém okně

  1. Do metody Show přidejte následující řádek kódu:

    MessageBox.Show(objectProvider.GetObject().ToString());
    

    Tento ukázkový kód nezahrnuje zpracování chyb. Zpracování chyb byste měli zahrnout do skutečného vizualizéru nebo jakéhokoli jiného typu aplikace.

  2. V nabídce Sestavení zvolte Sestavit MyFirstVisualizer. Projekt by se měl úspěšně sestavit. Před pokračováním opravte všechny chyby sestavení.

Kód na straně ladicího programu je teď dokončený. Existuje však ještě jeden krok; atribut, který říká ladicí straně, kterou kolekci tříd tvoří vizualizér.

Přidání typu pro vizualizaci kódu na straně ladění

V kódu na straně ladicího programu zadáte typ, který chcete vizualizovat (zdroj objektu) pro ladicí program pomocí atributu DebuggerVisualizerAttribute . Vlastnost Target nastaví typ pro vizualizaci.

  1. Přidejte následující kód atributu do DebuggerSide.cs za direktivy using , ale před namespace MyFirstVisualizer:

    [assembly:System.Diagnostics.DebuggerVisualizer(
    typeof(MyFirstVisualizer.DebuggerSide),
    typeof(VisualizerObjectSource),
    Target = typeof(System.String),
    Description = "My First Visualizer")]
    
  2. V nabídce Sestavení zvolte Sestavit MyFirstVisualizer. Projekt by se měl úspěšně sestavit. Před pokračováním opravte všechny chyby sestavení.

    V tuto chvíli je dokončen první vizualizér. Pokud jste postupovali správně, můžete vizualizér sestavit a nainstalovat ho do sady Visual Studio. Před instalací vizualizéru do sady Visual Studio byste ho ale měli otestovat, abyste měli jistotu, že běží správně. Teď vytvoříte testovací sadu pro spuštění vizualizéru bez jeho instalace do sady Visual Studio.

Přidání testovací metody pro zobrazení vizualizéru

  1. Do třídy public DebuggerSidepřidejte následující metodu:

    public static void TestShowVisualizer(object objectToVisualize)
    {
       VisualizerDevelopmentHost visualizerHost = new VisualizerDevelopmentHost(objectToVisualize, typeof(DebuggerSide));
       visualizerHost.ShowVisualizer();
    }
    
  2. V nabídce Sestavení zvolte Sestavit MyFirstVisualizer. Projekt by se měl úspěšně sestavit. Před pokračováním opravte všechny chyby sestavení.

    Dále musíte vytvořit spustitelný projekt pro volání knihovny DLL vizualizéru. Pro zjednodušení použijte projekt konzolové aplikace.

Přidání projektu konzolové aplikace do řešení

  1. V Průzkumník řešení klikněte pravým tlačítkem na řešení, zvolte Přidat a pak vyberte Nový projekt.

  2. Zvolte Soubor>nový>projekt. V rozevíracím seznamu jazyka zvolte C#. Do vyhledávacího pole zadejte konzolovou aplikaci a pak zvolte konzolovou aplikaci (.NET Framework) nebo konzolovou aplikaci pro .NET. Vyberte Další. V dialogovém okně, které se zobrazí, zadejte název MyTestConsolea pak vyberte Vytvořit.

Poznámka:

Pokud chcete vizualizér snadno otestovat pomocí testovacího svazku, vytvořte konzolovou aplikaci rozhraní .NET Framework. Místo toho můžete vytvořit konzolovou aplikaci .NET, ale testovací sada popsaná později není pro .NET podporovaná, takže k jeho otestování budete muset nainstalovat vizualizér. Pro konzolovou aplikaci .NET nejprve vytvořte konzolovou aplikaci, přidejte požadované odkazy na knihovnu DLL a projekt a pak postupujte podle kroků popsaných v tématu Přidání datového objektu na straně ladění. Informace o scénářích ASP.NET Core najdete v tématu Zvláštní aspekty na straně ladicího programu pro .NET 5.0 nebo novější.

Teď musíte přidat potřebné odkazy, aby MyTestConsole mohl volat MyFirstVisualizer.

Přidání nezbytných odkazů na MyTestConsole

  1. V Průzkumník řešení klikněte pravým tlačítkem na MyTestConsole a v místní nabídce zvolte Přidat odkaz.

  2. V dialogovém okně Přidat odkaz otevřete kartu Procházet a vyberte Microsoft.VisualStudio.DebuggerVisualizers.DLL.

  3. Vyberte OK.

  4. Klikněte pravým tlačítkem myši na MyTestConsole a znovu zvolte Přidat odkaz .

  5. V dialogovém okně Přidat odkaz otevřete kartu Projekty a vyberte MyFirstVisualizer.

  6. Vyberte OK.

Teď přidáte kód pro dokončení testovacího svazku.

Přidání kódu do MyTestConsole

  1. V Průzkumník řešení klikněte pravým tlačítkem na Program.cs a v místní nabídce zvolte Přejmenovat.

  2. Upravte název z Program.cs na něco smysluplnějšího, například TestConsole.cs.

    Poznámka:

    Visual Studio automaticky změní deklaraci třídy v TestConsole.cs tak, aby odpovídala názvu nového souboru.

  3. Do TestConsole.cs přidejte do using direktiv následující kód:

    using MyFirstVisualizer;
    
  4. V metodě Mainpřidejte následující kód:

    String myString = "Hello, World";
    DebuggerSide.TestShowVisualizer(myString);
    

Teď jste připraveni otestovat svůj první vizualizér.

Testování vizualizéru

  1. V Průzkumník řešení klepněte pravým tlačítkem myši MyTestConsole a v místní nabídce zvolte Nastavit jako spouštěný projekt.

  2. V nabídce Ladění zvolte Start.

    Konzolová aplikace se spustí a zobrazí vizualizér a zobrazí řetězec "Hello, World".

Blahopřejeme. Vytvořili jste a otestovali svůj první vizualizér!

Pokud chcete použít vizualizér v sadě Visual Studio místo pouhého volání z testovacího svazku, musíte ho nainstalovat. Další informace naleznete v tématu Postupy: Instalace vizualizéru.

Přidání datového objektu na straně ladění

V této části přepnete z datového objektu System.String na vlastní datový objekt.

  1. V Průzkumník řešení klikněte pravým tlačítkem na řešení, zvolte Přidat a pak vyberte Nový projekt. V rozevíracím seznamu jazyka zvolte C#. Do vyhledávacího pole zadejte knihovnu tříd a pak zvolte knihovnu tříd (.NET Framework) nebo knihovnu tříd pro .NET Standard.

    Poznámka:

    Pokud používáte testovací konzolovou aplikaci rozhraní .NET Framework, ujistěte se, že jste vytvořili projekt knihovny tříd rozhraní .NET Framework.

  2. Vyberte Další. V dialogovém okně, které se zobrazí, zadejte název MyDataObjecta pak vyberte Vytvořit.

  3. (Pouze knihovna tříd .NET Standard) V Průzkumník řešení klikněte pravým tlačítkem myši na projekt a zvolte Upravit soubor projektu. <TargetFramework> Změňte hodnotu na netstandard2.0.

    <TargetFramework>netstandard2.0</TargetFramework>
    
  4. MyDataObject Uvnitř oboru názvů nahraďte výchozí kód následujícím kódem.

    [Serializable] 
    public class CustomDataObject
    {
       public CustomDataObject()
       {
          this.MyData = "MyTestData";
       }
       public string MyData { get; set; }
    }
    

    Pro vizualizér jen pro čtení, například v tomto příkladu, není nutné implementovat metody VisualizerObjectSource.

    Dále aktualizujte projekt MyFirstVisualizer tak, aby používal nový datový objekt.

  5. V Průzkumník řešení pod projektem MyFirstVisualizer klikněte pravým tlačítkem myši na uzel Odkazy a zvolte Přidat odkaz.

  6. V části Projekty vyberte projekt MyDataObject .

  7. V kódu atributu DebuggerSide.cs aktualizujte cílovou hodnotu a změňte System.String na MyDataObject.CustomDataObject.

    Target = typeof(MyDataObject.CustomDataObject),
    
  8. V projektu MyFirstVisualizer nahraďte kód metody Show následujícím kódem.

    var data = objectProvider.GetObject() as MyDataObject.CustomDataObject;
    
    // You can replace displayForm with your own custom Form or Control.  
    Form displayForm = new Form();
    displayForm.Text = data.MyData;
    windowService.ShowDialog(displayForm);
    

    Předchozí kód používá vlastnost datového objektu k zobrazení v názvu formuláře.

    Dále aktualizujte konzolovou aplikaci tak, aby používala vlastní datový objekt.

  9. V Průzkumník řešení pod projektem MyTestConsole klikněte pravým tlačítkem myši na uzel Odkazy nebo Závislosti a přidejte odkaz na MyDataObjectprojekt .

  10. V Program.cs nahraďte kód v Main metodě následujícím kódem.

    // String myString = "Hello, World";
    CustomDataObject customDataObject = new CustomDataObject();
    
    DebuggerSide.TestShowVisualizer(customDataObject);
    
  11. (konzolová aplikace .NET) Uzavřete volání do TestShowVisualizer příkazu try-catch, protože testovacího svazku není podporován.

    try
    {
          DebuggerSide.TestShowVisualizer(customDataObject);
    }
    catch (Exception) {
    }
    

    Konzolová aplikace potřebuje odkaz na modul runtime vizualizéru. Odkaz můžete zachovat tak, že ponecháte předchozí kód a nebudete ho zakomentovat.

  12. Pro konzolovou aplikaci rozhraní .NET Framework můžete spustit testovací sadu (stiskněte klávesu F5) nebo můžete postupovat podle pokynů v tématu Postupy: Instalace vizualizéru.

    Pokud aplikaci spustíte pomocí testovacího svazku, aplikace zobrazí formulář Windows.

  13. V případě konzolové aplikace .NET zkopírujte MyFirstVisualizer.dll a MyDataObject.dll do složek popsaných v tématu Postupy: Instalace vizualizéru.

  14. Po instalaci vizualizéru nastavte zarážku, spusťte konzolovou aplikaci a najeďte myší na customDataObject. Pokud je všechno správně nastavené, měli byste vidět ikonu VizualizérIconlupy .

    Ikona lupy vizualizéru

    Když z lupy zvolíte MyFirstVisualizer , zobrazí se formulář s textem datového objektu v názvu.

    Vizualizér zobrazující formulář Windows