{"id":55000187,"date":"2019-08-01T00:00:00","date_gmt":"2020-03-27T19:38:44","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=187"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Visual_Studio_mit_LINQPad_Project_und_ProjectItems","status":"publish","type":"post","link":"https:\/\/vbentwickler.de\/Visual_Studio_mit_LINQPad_Project_und_ProjectItems\/","title":{"rendered":"Visual Studio mit LINQPad: Project und ProjectItems"},"content":{"rendered":"<p><b>In den Artikeln der Reihe Visual Studio erweitern greifen wir von Visual Studio-Erweiterungen aus auf Elemente von Visual Studio zu. Leider ist das Debuggen dieser Erweiterungen &auml;u&szlig;erst m&uuml;hsam. Zum Debuggen m&uuml;ssen Sie n&auml;mlich immer erst eine weitere Visual Studio-Instanz erstellen, welche dann die Erweiterungen enth&auml;lt und zum Testen bereitstellt. F&auml;llt eine &Auml;nderung an, m&uuml;ssen Sie das Debuggen beenden, die &Auml;nderungen einarbeiten und erneut starten. Da w&auml;re es doch praktisch, wenn man einfach nur eine Instanz von Visual Studio &ouml;ffnen und die darauf zugreifenden Methoden direkt testen k&ouml;nnte. Genau das realisieren wir in diesem Artikel, wo wir das Tool LINQPad nutzen. Dieses haben wir bereits in fr&uuml;heren Artikeln verwendet.<\/b><\/p>\n<p>Wer von Access und dem VBA-Editor kommt, findet das Debuggen unter Visual Studio bisweilen anstrengend. Im Visual Basic Editor war das alles viel einfacher: Man konnte einfach eine Prozedur in ein Standardmodul schreiben, die Einf&uuml;gemarke in der Prozedur platzieren und diese mit der Taste <b>F5 <\/b>starten. Damit konnte man sogar w&auml;hrend der Entwicklung auf Elemente des Visual Studio Editors selbst zugreifen! Und genau das wollen wir mit Visual Studio auch tun, um uns die Objekte, Methoden und Eigenschaften, die f&uuml;r die Programmierung von Visual Studio notwendig sind, besser kennenzulernen und schnell ausprobieren zu k&ouml;nnen.<\/p>\n<p>Eine M&ouml;glichkeit dazu finden wir &uuml;ber das Tool LINQPad. Dieses erlaubt die Eingabe von Prozeduren und die direkte Ausf&uuml;hrung mit der Taste <b>F5 <\/b>&#8211; genau so, wie Sie es auch von Access und dem VBA-Editor kennen. <\/p>\n<p>LINQPad k&ouml;nnen Sie in einer kostenlosen Version unter <b>https:\/\/www.linqpad.net\/<\/b> herunterladen. Wenn Sie damit einfache VB-Prozeduren ausf&uuml;hren wollen, wechseln Sie im Auswahlfeld <b>Language <\/b>auf <b>VB Program<\/b>. Dadurch wird direkt eine leere Prozedur namens <b>Main <\/b>angelegt, die wir mit einer einfachen <b>Debug.Print<\/b>-Anweisung f&uuml;llen. Diese ist &uuml;brigens automatisch verf&uuml;gbar, ohne dass Sie zuvor einen Verweis auf den Namespace <b>System.Diagnostics <\/b>hinzuf&uuml;gen m&uuml;ssen. Wenn Sie dann die Einf&uuml;gemarke in der Prozedur platzieren und auf die Start-Schaltfl&auml;che klicken oder die Taste <b>F5<\/b> bet&auml;tigen, f&uuml;hrt LINQPad die Prozedur aus und das Ergebnis landet im <b>Results<\/b>-Bereich von LINQPad (siehe Bild 1).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2019_04\/pic_187_001.png\" alt=\"Einfache Eingabe von Prozeduren\" width=\"549,6265\" height=\"273,1578\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 1: Einfache Eingabe von Prozeduren<\/span><\/b><\/p>\n<h2>Visual Studio fernsteuern<\/h2>\n<p>Nun wollen wir von LINQPad aus die aktuelle Visual Studio-Instanz fernsteuern. Dazu ben&ouml;tigen wir zun&auml;chst zwei Verweise.<\/p>\n<p>Diese f&uuml;gen wir &uuml;ber einen Dialog hinzu, den wir mit der Taste <b>F4 <\/b>&ouml;ffnen. Der nun erscheinende Dialog <b>Query Properties <\/b>enth&auml;lt eine Schaltfl&auml;che namens <b>Add&#8230;<\/b>, mit der wir einen weiteren Dialog namens <b>Add Custom Assembly References <\/b>anzeigen.<\/p>\n<p>Hier k&ouml;nnen Sie die angezeigte Liste aller verf&uuml;gbaren Verweise schnell durch die Eingabe der Buchstaben <b>env<\/b> filtern, sodass nur noch die Eintr&auml;ge aus Bild 2 erscheinen. Hier w&auml;hlen Sie die beiden Eintr&auml;ge <b>EnvDTE.dll <\/b>und <b>EnvDTE80.dll <\/b>aus und schlie&szlig;en den Dialog mit der <b>OK<\/b>-Schaltfl&auml;che.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2019_04\/pic_187_002.png\" alt=\"Hinzuf&uuml;gen von Verweisen\" width=\"649,559\" height=\"282,0562\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 2: Hinzuf&uuml;gen von Verweisen<\/span><\/b><\/p>\n<p>Danach zeigt der Dialog <b>Query Properties <\/b>die hinzugef&uuml;gten Verweise an (siehe Bild 3). Damit k&ouml;nnen Sie auch diesen Dialog schlie&szlig;en.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2019_04\/pic_187_003.png\" alt=\"Neu hinzugef&uuml;gte Verweise\" width=\"649,559\" height=\"261,9433\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 3: Neu hinzugef&uuml;gte Verweise<\/span><\/b><\/p>\n<h2>Referenzieren des Visual Studio-Objekts<\/h2>\n<p>Das oberste Element der Bibliothek zum Arbeiten mit Visual Studio ist das <b>DTE2<\/b>-Objekt.<\/p>\n<p>Dieses deklarieren wir in unserer Prozedur wie folgt:<\/p>\n<pre><span style=\"color:blue;\">Dim <\/span>objDTE<span style=\"color:blue;\"> As <\/span>EnvDTE80.DTE2<\/pre>\n<p>Dann referenzieren wir es &uuml;ber die Methode <b>GetActiveObject<\/b>:<\/p>\n<pre>objDTE = System.Runtime.InteropServices.Marshal.GetActiveObject(\"VisualStudio.DTE.15.0\")<\/pre>\n<p>Hier ist zu beachten, dass Sie die richtige Version angeben &#8211; hier etwa <b>15.0 <\/b>f&uuml;r Visual Studio 2017. Danach k&ouml;nnen wir mit der folgenden Anweisung etwa das aktuell angezeigte Dokument in Visual Studio ausgeben lassen:<\/p>\n<pre><span style=\"color:blue;\">Debug.Print<\/span> (objDTE.ActiveDocument.Name.ToString())<\/pre>\n<p>Das Ergebnis sieht schlie&szlig;lich wie in Bild 4 aus. Gemessen daran, wie lange es dauert, einen Zugriff auf Elemente der Benutzeroberfl&auml;che von Visual Studio auszuprobieren, wenn wir diese innerhalb einer Visual Studio-Erweiterung testen, geschieht dies au&szlig;erdem rasend schnell. Damit haben wir also ein Werkzeug, um uns komfortabel die Elemente des Objektmodells f&uuml;r den Zugriff auf Visual Studio anzusehen.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2019_04\/pic_187_004.png\" alt=\"Zugriff auf Visual Studio\" width=\"549,6265\" height=\"265,261\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 4: Zugriff auf Visual Studio<\/span><\/b><\/p>\n<h2>Elemente des DTE2-Objekts<\/h2>\n<p>Das <b>DTE2<\/b>-Objekt hat folgende f&uuml;r uns interessante Eigenschaften:<\/p>\n<ul>\n<li><b>ActiveDocument<\/b>: Liefert einen Verweis auf das aktuell aktive Codefenster (Beispiel siehe oben)<\/li>\n<li><b>ActiveSolutionProjects<\/b>: Liefert eine Auflistung aller aktuell markierten Projekte, also auch solche Projekte, von denen mindestens ein Element markiert ist:<\/li>\n<\/ul>\n<pre>         For Each objProject In objDTE.ActiveSolutionProjects\r\n             <span style=\"color:blue;\">Debug.Print<\/span>(objProject.Name)\r\n         <span style=\"color:blue;\">Next<\/span> objProject<\/pre>\n<ul>\n<li><b>ActiveWindow<\/b>: Liefert einen Verweis auf das aktive Fenster &#8211; arbeitet &auml;hnlich wie <b>ActiveDocument<\/b>.<\/li>\n<li><b>CommandBars<\/b>: Enth&auml;lt eine Auflistung aller Men&uuml;s von Visual Studio.<\/li>\n<\/ul>\n<pre>         <span style=\"color:blue;\">Dim <\/span>i<span style=\"color:blue;\"> As Integer<\/span>    \r\n         For i = 1 To objDTE.CommandBars.Count()\r\n             <span style=\"color:blue;\">Debug.Print<\/span>(objDTE.CommandBars.Item(i).Name)\r\n         <span style=\"color:blue;\">Next<\/span> i<\/pre>\n<ul>\n<li><b>Documents<\/b>: Auflistung aller ge&ouml;ffneten Dokumente, die gez&auml;hlt oder deren Eintr&auml;ge ausgegeben werden k&ouml;nnen:<\/li>\n<\/ul>\n<pre>         <span style=\"color:blue;\">Debug.Print<\/span> (objDTE.Documents.Count.ToString())\r\n         <span style=\"color:blue;\">Dim <\/span>objDocument<span style=\"color:blue;\"> As <\/span>EnvDTE.Document\r\n         For Each objDocument In objDTE.Documents\r\n             <span style=\"color:blue;\">Debug.Print<\/span> (objDocument.Name)\r\n         <span style=\"color:blue;\">Next<\/span> objDocument<\/pre>\n<ul>\n<li><b>ItemOperations<\/b>: Objekt, das einige interessante Methoden f&uuml;r den Zugriff auf die Elemente des Projekts liefert, zum Beispiel <b>AddExistingItem <\/b>zum Hinzuf&uuml;gen einer vorhandenen Datei zum Projekt oder <b>AddNewItem <\/b>zum Erstellen eines neuen Elements auf Basis des gew&uuml;nschten Typs.<\/li>\n<li><b>SelectedItems<\/b>: Liefert eine Liste der markierten Eintr&auml;ge des Projektmappen-Explorers:<\/li>\n<\/ul>\n<pre>         <span style=\"color:blue;\">Dim <\/span>objItem<span style=\"color:blue;\"> As <\/span>EnvDTE.SelectedItem\r\n         For Each objItem In objDTE.SelectedItems\r\n             <span style=\"color:blue;\">Debug.Print<\/span> (objItem.Name)\r\n         <span style=\"color:blue;\">Next<\/span> objItem<\/pre>\n<ul>\n<li><b>Solution<\/b>: Liefert das <b>Solution<\/b>-Objekt aus dem Objektmappen-Explorer:<\/li>\n<\/ul>\n<pre>         <span style=\"color:blue;\">Debug.Print<\/span> (objDTE.Solution.FullName.ToString())<\/pre>\n<ul>\n<li><b>StatusBar<\/b>: Liefert den aktuellen Inhalt der Statusleiste oder erlaubt das Einstellen des Inhalts. Wenn Sie einmal l&auml;ngere Operationen in Visual Studio per Erweiterung erledigen, k&ouml;nnen Sie den Benutzer in der Statusleiste dar&uuml;ber informieren:<\/li>\n<\/ul>\n<pre>         <span style=\"color:blue;\">Debug.Print<\/span> (objDTE.StatusBar.Text)\r\n         objDTE.StatusBar.Text = \"Fertig.\"<\/pre>\n<ul>\n<li><b>ToolWindows<\/b>: Erm&ouml;glicht den Zugriff auf die ToolWindows von Visual Studio, und zwar &uuml;ber jeweils eigene Eigenschaften f&uuml;r jedes der verf&uuml;gbaren Toolwindows <b>CommandWindow<\/b>, <b>ErrorList<\/b>, <b>OutputWindow<\/b>, <b>SolutionExplorer<\/b>, <b>TaskList <\/b>und <b>ToolBox<\/b>:<\/li>\n<\/ul>\n<pre>         ''Text an CommandWindow senden\r\n         objDTE.ToolWindows.CommandWindow.SendInput(\"Test\", <span style=\"color:blue;\">False<\/span>)\r\n         ''Anzahl der markierten Objekte im Projektmappen-Explorer ausgeben\r\n         <span style=\"color:blue;\">Debug.Print<\/span> (objDTE.ToolWindows.SolutionExplorer.SelectedItems.Length.ToString())\r\n         ''Ausgabe des aktiven Tabs in der Toolbox\r\n         <span style=\"color:blue;\">Debug.Print<\/span> (objDTE.ToolWindows.GetToolWindow(\"ToolBox\").ActiveTab.Name)<\/pre>\n<p>Die Beispiele hierzu finden Sie in der Datei <b>VisualStudioProgrammieren_DTE.linq<\/b>.<\/p>\n<h2>ItemOperations: Elemente hinzuf&uuml;gen und mehr<\/h2>\n<p>Die <b>ItemOperations<\/b>-Eigenschaft des <b>DTE2<\/b>-Objekts bietet zum Beispiel verschiedene M&ouml;glichkeiten, Elemente zu einem Projekt hinzuzuf&uuml;gen:<\/p>\n<ul>\n<li><b>AddExistingItem<\/b>: F&uuml;gt eine bereits auf der Festplatte existierende Datei zu einem Projekt hinzu, die als Parameter angegeben werden muss und arbeitet somit wie der Kontextmen&uuml;-Befehl <b>Hinzuf&uuml;gen|Vorhandenes Element&#8230; <\/b>des Projekt-Elements. Wenn mehr als ein Element im Projektmappen-Explorer markiert ist, wird ein Fehler ausgel&ouml;st:<\/li>\n<\/ul>\n<pre>         objDTE.ItemOperations.AddExistingItem(\"C:\\...\\Beispieldatei.txt\")<\/pre>\n<ul>\n<li><b>AddNewItem<\/b>: F&uuml;gt ein neues Element zum aktuell markierten Projekt beziehungsweise zu dem Projekt des aktuell markierten Elements im Projektmappen-Explorer hinzu und ersetzt somit den Kontextmen&uuml;-Befehl <b>Hinzuf&uuml;gen|Neues Element&#8230; <\/b>des Projekt-Elements. Den mit diesem Kontextmen&uuml;-Eintrag aufgerufenen Dialog ben&ouml;tigen Sie aber dennoch, um genaue Bezeichnung f&uuml;r das hinzuzuf&uuml;gende Element herauszufinden. Diesen als ersten Parameter &uuml;bergebenen Ausdruck stellen Sie aus der Kategorie und der Vorlage zusammen, also zum Beispiel wie in Bild 5 <b>Allgemeine Elemente\\Code\\Modul<\/b>. Sie stellen also einen durch das Backslash-Zeichen (\\) getrennt die Kategorie oder Kategorien und die Elementbezeichnung zusammen. Das zweite Argument ist der Name des hinzuzuf&uuml;genden Elements:<\/li>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2019_04\/pic_187_005.png\" alt=\"Diese Elemente geben Sie auch bei der AddNewItem-Methode an.\" width=\"700\" height=\"351,1892\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 5: Diese Elemente geben Sie auch bei der AddNewItem-Methode an.<\/span><\/b><\/p>\n<\/ul>\n<pre>         objDTE.ItemOperations.AddNewItem(\"Allgemeine Elemente\\Code\\Modul\", \"mdlBeispiel.vb\")<\/pre>\n<ul>\n<li><b>IsFileOpen<\/b>: Diese Funktion liefert den Wert <b>True<\/b>, wenn die als Parameter angegebene Datei in Visual Studio ge&ouml;ffnet ist, aber nicht im Projektmappen-Explorer angezeigt wird. Sie liefert den Wert <b>False<\/b>, wenn die Datei entweder nicht in Visual Studio ge&ouml;ffnet ist oder aber dort ge&ouml;ffnet ist und im Projektmappen-Explorer erscheint. Beispiel f&uuml;r einen Aufruf:<\/li>\n<\/ul>\n<pre>         <span style=\"color:blue;\">Debug.Print<\/span>(objDTE.ItemOperations.IsFileOpen(\"C:\\...\\Beispieldatei.txt\"))<\/pre>\n<ul>\n<li><b>Navigate<\/b>: Navigiert in einem neuen Tab in Visual Studio zu der angegebenen Adresse. Hier k&ouml;nnen Sie eine Internetadresse angeben, aber auch den Pfad zu einer Datei. Dabei wird immer das aktuelle Fenster in Visual Studio als Ziel verwendet:<\/li>\n<\/ul>\n<pre>         objDTE.ItemOperations.Navigate(\"http:\/\/www.access-im-unternehmen.de\")\r\n         objDTE.ItemOperations.Navigate(\"C:\\...\\Beispieldatei.txt\")<\/pre>\n<ul>\n<li><b>NewFile<\/b>: Legt ein neues Element in Visual Studio an, ohne es auf der Festplatte zu speichern. Der erste Parameter erwartet die Angabe der Vorlage (wie bereits bei <b>AddNewItem <\/b>beschrieben), der zweite den Namen. Wenn Sie keinen Parameter anlegen, wird eine Textdatei namens <b>TextFile1.txt <\/b>angelegt:<\/li>\n<\/ul>\n<pre>         objDTE.ItemOperations.NewFile()<\/pre>\n<ul>\n<li><b>OpenFile<\/b>: &Ouml;ffnet eine Datei von der Festplatte in Visual Studio. Die Parameter stimmen mit denen von <b>NewFile <\/b>&uuml;berein.<\/li>\n<\/ul>\n<div class=\"rcp_restricted\"><p><span style=\"color: #ff0000\">M&ouml;chten Sie weiterlesen? Dann l&ouml;sen Sie Ihr Ticket!<\/span><br \/>\n<span style=\"color: #ff0000\">Hier geht es zur Bestellung des Jahresabonnements des Magazins <strong>Visual Basic Entwickler<\/strong>:<\/span><br \/>\n<span style=\"color: #ff0000\"><a style=\"color: #ff0000\" href=\"https:\/\/shop.minhorst.com\/magazine\/363\/visual-basic-entwickler-jahresabonnement?c=77\">Zur Bestellung ...<\/a><\/span><br \/>\n<span style=\"color: #ff0000\">Danach greifen Sie sofort auf <strong>alle rund 200 Artikel<\/strong> unseres Angebots zu - auch auf diesen hier!<\/span><br \/>\n<span style=\"color: #000000\">Oder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein:<\/span><\/p>\n<\/div>\n\n\t\n\t<form id=\"rcp_login_form\"  class=\"rcp_form\" method=\"POST\" action=\"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000187\/\">\n\n\t\t\n\t\t<fieldset class=\"rcp_login_data\">\n\t\t\t<p>\n\t\t\t\t<label for=\"rcp_user_login\">Username or Email<\/label>\n\t\t\t\t<input name=\"rcp_user_login\" id=\"rcp_user_login\" class=\"required\" type=\"text\"\/>\n\t\t\t<\/p>\n\t\t\t<p>\n\t\t\t\t<label for=\"rcp_user_pass\">Password<\/label>\n\t\t\t\t<input name=\"rcp_user_pass\" id=\"rcp_user_pass\" class=\"required\" type=\"password\"\/>\n\t\t\t<\/p>\n\t\t\t\t\t\t<p>\n\t\t\t\t<input type=\"checkbox\" name=\"rcp_user_remember\" id=\"rcp_user_remember\" value=\"1\"\/>\n\t\t\t\t<label for=\"rcp_user_remember\">Remember me<\/label>\n\t\t\t<\/p>\n\t\t\t<p class=\"rcp_lost_password\"><a href=\"\/data\/wp\/v2\/posts\/55000187?rcp_action=lostpassword\"><\/a><\/p>\n\t\t\t<p>\n\t\t\t\t<input type=\"hidden\" name=\"rcp_action\" value=\"login\"\/>\n\t\t\t\t\t\t\t\t\t<input type=\"hidden\" name=\"rcp_redirect\" value=\"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000187\/\"\/>\n\t\t\t\t\t\t\t\t<input type=\"hidden\" name=\"rcp_login_nonce\" value=\"c33d383206\"\/>\n\t\t\t\t<input id=\"rcp_login_submit\" class=\"rcp-button\" type=\"submit\" value=\"Login\"\/>\n\t\t\t<\/p>\n\t\t\t\t\t<\/fieldset>\n\n\t\t\n\t<\/form>\n<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In den Artikeln der Reihe Visual Studio erweitern greifen wir von Visual Studio-Erweiterungen aus auf Elemente von Visual Studio zu. Leider ist das Debuggen dieser Erweiterungen &auml;u&szlig;erst m&uuml;hsam. Zum Debuggen m&uuml;ssen Sie n&auml;mlich immer erst eine weitere Visual Studio-Instanz erstellen, welche dann die Erweiterungen enth&auml;lt und zum Testen bereitstellt. F&auml;llt eine &Auml;nderung an, m&uuml;ssen Sie das Debuggen beenden, die &Auml;nderungen einarbeiten und erneut starten. Da w&auml;re es doch praktisch, wenn man einfach nur eine Instanz von Visual Studio &ouml;ffnen und die darauf zugreifenden Methoden direkt testen k&ouml;nnte. Genau das realisieren wir in diesem Artikel, wo wir das Tool LINQPad nutzen. Dieses haben wir bereits in fr&uuml;heren Artikeln verwendet.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_uf_show_specific_survey":0,"_uf_disable_surveys":false,"footnotes":""},"categories":[662019,66042019,44000013],"tags":[],"yst_prominent_words":[],"class_list":["post-55000187","post","type-post","status-publish","format-standard","hentry","category-662019","category-66042019","category-Visual_Studio_nutzen"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000187","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/comments?post=55000187"}],"version-history":[{"count":0,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000187\/revisions"}],"wp:attachment":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/media?parent=55000187"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/categories?post=55000187"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/tags?post=55000187"},{"taxonomy":"yst_prominent_words","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/yst_prominent_words?post=55000187"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}