Erste Schritte mit domänenspezifischen Sprachen
In diesem Thema werden die grundlegenden Konzepte zum Definieren und Verwenden einer mit dem Visual Studio SDK für Modellierung erstellten domänenspezifischen Sprache (DSL) erläutert.
Hinweis
Das SDK für Textvorlagentransformation und das Modellierungs-SDK für Visual Studio werden automatisch installiert, wenn Sie bestimmte Features von Visual Studio installieren. Weitere Informationen finden Sie in diesem Blogbeitrag.
Wenn Sie mit DSLs noch nicht vertraut sind, empfehlen wir, das DSL-Tools-Lab durchzuarbeiten. Sie finden es auf dieser Website: SDK für Visualisierung und Modellierung
Verwendungsmöglichkeiten einer domänenspezifischen Sprache
Eine domänenspezifische Sprache ist eine (in der Regel grafische) Notation, die für einen bestimmten Zweck vorgesehen ist. Sprachen wie UML (Unified Modeling Language) sind im Gegensatz dazu universelle Computersprachen. In einer DSL können Sie die Modellelementtypen und deren Beziehungen sowie ihre Darstellung auf dem Bildschirm definieren.
Nachdem Sie eine DSL entworfen haben, können Sie sie als Teil eines VSIX-Pakets (Visual Studio-Integrationserweiterung) verteilen. Benutzer verwenden die DSL in Visual Studio:
Die Notation ist nur ein Teil einer DSL. Zusammen mit der Notation enthält Ihr VSIX-Paket Tools, die Benutzer anwenden können, um ihre Modelle zu bearbeiten und Material aus ihnen zu generieren.
Einer der Hauptanwendungsbereiche von DSLs ist das Generieren von Programmcode, Konfigurationsdateien und anderen Artefakten. Insbesondere bei großen Projekten und Produktlinien, bei denen mehrere Varianten eines Produkts erstellt werden, kann es die Zuverlässigkeit erheblich erhöhen und eine sehr schnelle Reaktion auf sich ändernde Anforderungen ermöglichen, wenn viele der variablen Aspekte anhand von DSLs generiert werden.
Der übrige Teil dieser Übersicht ist eine exemplarische Vorgehensweise, in der die grundlegenden Vorgänge zum Erstellen und Verwenden einer domänenspezifischen Sprache in Visual Studio vorgestellt werden.
Voraussetzungen
Zur Definition einer DSL müssen folgende Komponenten installiert sein:
Komponente | Link |
---|---|
Visual Studio | http://go.microsoft.com/fwlink/?LinkId=185579 |
Visual Studio SDK | https://go.microsoft.com/fwlink/?linkid=2166172 |
Visual Studio SDK für Modellierung |
Hinweis
Die Komponente Textvorlagentransformation wird automatisch als Teil der Workload Visual Studio-Erweiterungsentwicklung installiert. Sie können die Installation auch über die Registerkarte Einzelne Komponenten des Visual Studio-Installers unter der Kategorie SDKs, Bibliotheken und Frameworks durchführen. Installieren Sie die Komponente Modellierungs-SDK auf der Registerkarte Einzelne Komponenten.
Erstellen einer DSL-Projektmappe
Zum Erstellen einer neuen DSL erstellen Sie mithilfe der Projektvorlage „Domänenspezifische Sprache“ eine neue Visual Studio-Projektmappe.
Zeigen Sie im Menü Datei auf Neu, und klicken Sie dann auf Projekt.
Erweitern Sie unter Projekttypen den Knoten Andere Projekttypen, und klicken Sie auf Erweiterungen.
Klicken Sie auf Domänenspezifischer Sprachdesigner.
Geben Sie im Feld Name den Namen FamilyTree ein. Klicken Sie auf OK.
Der Domänenspezifische Sprach-Designer-Assistent wird geöffnet und zeigt eine Liste mit Vorlagen für DSL-Projektmappen.
Klicken Sie auf die einzelnen Vorlagen, um eine Beschreibung anzuzeigen.
Die Vorlagen sind nützliche Ausgangspunkte. Jede von ihnen bietet eine vollständige funktionierende DSL, die Sie entsprechend Ihren Anforderungen bearbeiten können. Normalerweise wählen Sie die Vorlage aus, die der DSL, die Sie erstellen möchten, am nächsten kommt.
Wählen Sie für diese exemplarische Vorgehensweise die Vorlage Minimale Sprache aus.
Geben Sie auf der entsprechenden Seite des Assistenten eine Dateinamenerweiterung für die DSL ein. Diese Erweiterung wird für Dateien mit Instanzen Ihrer DSL verwendet.
Wählen Sie eine Erweiterung aus, die keiner Anwendung auf Ihrem Computer bzw. auf einem Computer, auf dem Sie die DSL installieren möchten, zugeordnet ist. docx und htm sind beispielsweise keine akzeptablen Erweiterungen.
Der Assistent warnt Sie, wenn die eingegebene Erweiterung bereits als DSL verwendet wird. Verwenden Sie nach Möglichkeit eine andere Dateinamenerweiterung. Sie können die experimentelle Instanz des Visual Studio SDK auch zurücksetzen, um alte experimentelle Designer zu löschen. Wechseln Sie ins Windows-Startmenü, setzen Sie Visual Studio zurück, und führen Sie dann den Befehl Microsoft Visual Studio Experimental Instance zurücksetzen aus, der Ihrer Version von Visual Studio entspricht.
Überprüfen Sie die anderen Seiten, und klicken Sie dann auf Fertig stellen.
Es wird eine Projektmappe generiert, die zwei Projekte namens „Dsl“ und „DslPackage“ enthält. Eine Diagrammdatei mit dem Namen „DslDefinition.dsl“ wird geöffnet.
Hinweis
Der Großteil des Codes, den Sie in den Ordnern in den beiden Projekten sehen, wird aus der Datei „DslDefinition.dsl“ generiert. Aus diesem Grund werden die meisten Änderungen an Ihrer DSL in dieser Datei vorgenommen.
Die Benutzeroberfläche gleicht nun der folgenden Abbildung.
Diese Projektmappe definiert eine domänenspezifische Sprache. Weitere Informationen finden Sie unter Übersicht über die Benutzeroberfläche für domänenspezifische Sprachtools.
Wichtige Teile der DSL-Projektmappe
Beachten Sie die folgenden Teile der neuen Projektmappe:
Dsl\DslDefinition.dsl: Dies ist die Datei, die beim Erstellen einer DSL-Projektmappe angezeigt wird. Fast der gesamte Code in der Projektmappe wird aus dieser Datei generiert, und die meisten Änderungen an einer DSL-Definition werden in dieser Datei vorgenommen. Weitere Informationen finden Sie unter Arbeiten mit dem DSL-Definitionsdiagramm.
Projekt „Dsl“: Dieses Projekt enthält Code, der die domänenspezifische Sprache definiert.
Projekt „DslPackage“: Dieses Projekt enthält Code, mit dem Instanzen der DSL in Visual Studio geöffnet und bearbeitet werden können.
Ausführen der DSL
Sie können die DSL-Projektmappe ausführen, sobald Sie sie erstellt haben. Später können Sie die DSL-Definition schrittweise ändern und die Projektmappe nach jeder Änderung erneut ausführen.
So experimentieren Sie mit der DSL
Klicken Sie auf der Symbolleiste des Projektmappen-Explorers auf Alle Vorlagen transformieren. Dadurch wird der Großteil des Quellcodes aus „DslDefinition.dsl“ erneut generiert.
Hinweis
Wenn Sie DslDefinition.dsl ändern, müssen Sie auf Alle Vorlagen transformieren klicken, bevor Sie die Projektmappe neu erstellen. Dieser Schritt kann automatisiert werden. Weitere Informationen finden Sie unter Automatisieren von „Alle Vorlagen transformieren“.
Drücken Sie F5, oder klicken Sie im Menü Debuggen auf Debuggen starten.
Die DSL wird erstellt und in der experimentellen Instanz von Visual Studio installiert.
Eine experimentelle Instanz von Visual Studio wird gestartet. Die experimentelle Instanz übernimmt ihre Einstellungen aus einer separaten Unterstruktur der Registrierung, in der Visual Studio-Erweiterungen zu Debugzwecken registriert werden. Normale Instanzen von Visual Studio haben keinen Zugriff auf Erweiterungen, die dort registriert sind.
Öffnen Sie in der experimentellen Instanz von Visual Studio im Projektmappen-Explorer die Modelldatei mit dem Namen Test.
- oder -
Klicken Sie mit der rechten Maustaste auf das Debuggingprojekt, zeigen Sie auf Hinzufügen, und klicken Sie dann auf Element. Wählen Sie im Dialogfeld Element hinzufügen den Dateityp Ihrer DSL aus.
Die Modelldatei wird als leeres Diagramm geöffnet.
Die Toolbox mit geeigneten Tools für den Diagrammtyp wird geöffnet.
Verwenden Sie die Tools, um Formen und Verbinder im Diagramm zu erstellen.
Erstellen Sie Formen, indem Sie Elemente aus dem ExampleShape-Tool in das Diagramm ziehen.
Verbinden Sie zwei Formen, indem Sie auf das ExampleConnector-Tool, dann auf die erste Form und anschließend auf die zweite Form klicken.
Klicken Sie auf die Bezeichnungen der Formen, um diese zu ändern.
Ihre experimentelle Instanz von Visual Studio ähnelt dem folgenden Beispiel:
Inhalt eines Modells
Der Inhalt einer Datei, die eine Instanz einer DSL ist, wird als Modell bezeichnet. Das Modell enthält Modellelemente und Links bzw. Verknüpfungen zwischen den Elementen. Die DSL-Definition gibt an, welche Modellelementtypen und Links im Modell vorhanden sein können. In einer mit der Vorlage „Minimale Sprache“ erstellten DSL gibt es beispielsweise einen Modellelementtyp und einen Linktyp.
Die DSL-Definition kann festlegen, wie das Modell in einem Diagramm dargestellt wird. Sie können aus einer Vielzahl von Formen- und Verbindungsarten wählen. Sie können angeben, dass einige Formen in anderen Formen angezeigt werden.
Sie können ein Modell als Struktur in der Explorer-Ansicht anzeigen, während Sie es bearbeiten. Wenn Sie dem Diagramm Formen hinzufügen, werden die Modellelemente auch im Explorer angezeigt. Der Explorer kann auch dann verwendet werden, wenn kein Diagramm vorhanden ist.
Falls der Explorer in der Debuginstanz von Visual Studio nicht angezeigt wird, zeigen Sie im Menü Ansicht auf Weitere Fenster, und klicken Sie dann auf <Ihre Sprache> Explorer.
API Ihrer DSL
Ihre DSL generiert eine API, mit der Sie Modelle, die Instanzen der DSL sind, lesen und aktualisieren können. Eine Verwendungsmöglichkeit der API ist das Generieren von Textdateien aus einem Modell. Weitere Informationen finden Sie unter Generieren von Code zur Entwurfszeit mithilfe von T4-Textvorlagen.
Öffnen Sie in der Debuggingprojektmappe die Vorlagendateien mit der Erweiterung „.tt“. Diese Beispiele zeigen, wie Sie Text aus Modellen generieren können, und ermöglichen es Ihnen, die API Ihrer DSL zu testen. Eines der Beispiele ist in Visual Basic geschrieben, das andere in Visual C#.
Unter jeder Vorlagendatei befindet sich die von der Vorlage generierte Datei. Erweitern Sie die Vorlagendatei im Projektmappen-Explorer, und öffnen Sie die generierte Datei.
Die Vorlagendatei enthält ein kurzes Codesegment, das alle Elemente im Modell auflistet.
Die generierte Datei enthält das Ergebnis.
Wenn Sie eine Modelldatei ändern, werden nach dem erneuten Generieren der Dateien entsprechende Änderungen in den generierten Dateien angezeigt.
So generieren Sie Textdateien nach dem Ändern der Modelldatei erneut
Speichern Sie die Modelldatei in der experimentellen Instanz von Visual Studio.
Stellen Sie sicher, dass der Dateinamenparameter in jeder TT-Datei auf die Modelldatei verweist, die Sie für Experimente verwenden. Speichern Sie die TT-Datei.
Klicken Sie auf der Symbolleiste des Projektmappen-Explorers auf Alle Vorlagen transformieren.
- oder -
Klicken Sie mit der rechten Maustaste auf die Vorlagen, die Sie erneut generieren möchten, und klicken Sie dann auf Benutzerdefiniertes Tool ausführen.
Sie können einem Projekt beliebig viele Textvorlagendateien hinzufügen. Jede Vorlage generiert eine Ergebnisdatei.
Hinweis
Wenn Sie die DSL-Definition ändern, funktioniert der Beispieltextvorlagencode erst nach dem Aktualisieren.
Weitere Informationen finden Sie unter Generieren von Code für eine domänenspezifische Sprache und Schreiben von Code zum Anpassen einer domänenspezifischen Sprache.
Anpassen der DSL
Wenn Sie die DSL-Definition ändern möchten, schließen Sie die experimentelle Instanz, und aktualisieren Sie die Definition in der Hauptinstanz von Visual Studio.
Hinweis
Nach dem Ändern der DSL-Definition können Informationen in den Testmodellen, die Sie mit früheren Versionen erstellt haben, verloren gehen. Die Debuggingprojektmappe enthält beispielsweise eine Datei namens „Sample“, die einige Formen und Verbinder enthält. Wenn Sie mit der Entwicklung Ihrer DSL-Definition beginnen, sind diese nicht sichtbar, und sie gehen beim Speichern der Datei verloren.
Sie können eine Vielzahl von Erweiterungen an Ihrer DSL vornehmen. Die folgenden Beispiele geben Ihnen einen Eindruck von den Möglichkeiten.
Speichern Sie nach jeder Änderung die DSL-Definition, klicken Sie im Projektmappen-Explorer auf Alle Vorlagen transformieren, und drücken Sie dann F5, um mit der geänderten DSL zu experimentieren.
Umbenennen der Typen und Tools
Benennen Sie die vorhandenen Domänenklassen und -beziehungen um. Bei einer DSL-Definition, die mit der Vorlage „Minimale Sprache“ erstellt wurde, können Sie beispielsweise die folgenden Umbenennungen vornehmen, damit die DSL Stammbäume darstellt.
So benennen Sie Domänenklassen und -beziehungen sowie Tools um
Benennen Sie im Diagramm „DslDefinition“ ExampleModel in FamilyTreeModel, ExampleElement in Person, Targets in Parents und Sources in Children um. Sie können auf die einzelnen Bezeichnungen klicken, um sie zu ändern.
Benennen Sie die Element- und Verbindungstools um.
Öffnen Sie das Fenster „DSL-Explorer“, indem Sie unter „Projektmappen-Explorer“ auf die entsprechende Registerkarte klicken. Falls die Registerkarte nicht angezeigt wird, zeigen Sie im Menü Ansicht auf Weitere Fenster, und klicken Sie dann auf DSL-Explorer. „DSL-Explorer“ wird nur angezeigt, wenn das DSL-Definitionsdiagramm das aktive Fenster ist.
Öffnen Sie das Eigenschaftenfenster, und positionieren Sie es so, dass Sie den DSL-Explorer und die Eigenschaften gleichzeitig sehen können.
Erweitern Sie im DSL-Explorer Editor, Toolboxregisterkarten, <Ihre DSL> und dann Tools.
Klicken Sie auf ExampleElement. Dies ist das Toolboxelement, das zum Erstellen von Elementen verwendet wird.
Ändern Sie im Eigenschaftenfenster die Eigenschaft Name in Person.
Beachten Sie, dass sich die Eigenschaft Beschriftung ebenfalls ändert.
Ändern Sie auf die gleiche Weise den Namen des Tools ExampleConnector in ParentLink. Ändern Sie die Eigenschaft Beschriftung, sodass es sich dabei nicht um eine Kopie der Eigenschaft „Name“ handelt. Geben Sie beispielsweise Parent Link ein.
Erstellen Sie die DSL neu.
Speichern Sie die DSL-Definitionsdatei.
Klicken Sie auf der Symbolleiste des Projektmappen-Explorers auf Alle Vorlagen transformieren.
Drücken Sie F5. Warten Sie, bis die experimentelle Instanz von Visual Studio geöffnet wird.
Öffnen Sie in der experimentellen Instanz von Visual Studio in der Debuggingprojektmappe eine Testmodelldatei. Ziehen Sie Elemente aus der Toolbox in die Datei. Beachten Sie, dass sich die Toolbeschriftungen und die Typnamen im DSL-Explorer geändert haben.
Speichern Sie die Modelldatei.
Öffnen Sie eine TT-Datei, und ersetzen Sie Vorkommen des alten Typs und der alten Eigenschaftennamen durch die neuen Namen.
Stellen Sie sicher, dass der in der TT-Datei angegebene Dateiname auf Ihr Testmodell festgelegt ist.
Speichern Sie die TT-Datei. Öffnen Sie die generierte Datei, um das Ergebnis der Ausführung des Codes in der TT-Datei anzuzeigen. Vergewissern Sie sich, dass es korrekt ist.
Hinzufügen von Domäneneigenschaften zu Klassen
Fügen Sie einer Domänenklasse Eigenschaften hinzu, um beispielsweise die Geburts- und Todesjahre einer Person darzustellen.
Damit die neuen Eigenschaften im Diagramm angezeigt werden, müssen Sie der Form, die das Modellelement darstellt, Decorator-Elemente hinzufügen. Zudem müssen Sie die Eigenschaften den Decorator-Elementen zuordnen.
So fügen Sie Eigenschaften hinzu und zeigen Sie sie an
Fügen Sie die Eigenschaften hinzu.
Klicken Sie im DSL-Definitionsdiagramm mit der rechten Maustaste auf die Domänenklasse Person, zeigen Sie auf Hinzufügen, und klicken Sie dann auf Domäneneigenschaft.
Geben Sie eine Liste mit neuen Eigenschaftennamen ein, z. B. Birth und Death. Drücken Sie nach jedem Namen die EINGABETASTE.
Fügen Sie Decorator-Elemente hinzu, die die Eigenschaften in der Form anzeigen.
Folgen Sie der grauen Linie, die von der Domänenklasse „Person“ zur anderen Seite des Diagramms verläuft. Dies ist eine Diagrammelementzuordnung. Sie verknüpft die Domänenklasse mit einer Formklasse.
Klicken Sie mit der rechten Maustaste auf diese Formklasse, zeigen Sie auf Hinzufügen, und klicken Sie dann auf Text Decorator.
Fügen Sie zwei Decorator-Elemente mit Namen wie BirthDecorator und DeathDecorator hinzu.
Wählen Sie jedes neue Decorator-Element aus, und legen Sie im Eigenschaftenfenster das Feld Position fest. Dadurch wird bestimmt, wo der Wert der Domäneneigenschaft in der Form angezeigt wird. Legen Sie beispielsweise InnerBottomLeft und InnerBottomRight fest.
Ordnen Sie die Decorator-Elemente den Eigenschaften zu.
Öffnen Sie das Fenster DSL-Details. Es befindet sich normalerweise auf einer Registerkarte neben dem Ausgabefenster. Falls es nicht angezeigt wird, zeigen Sie im Menü Ansicht auf Weitere Fenster, und klicken Sie dann auf DSL-Details.
Klicken Sie im DSL-Definitionsdiagramm auf die Linie, die die Domänenklasse Person mit der Formklasse verbindet.
Klicken Sie im Fenster DSL-Details auf der Registerkarte Decoratorzuordnungen auf das Kontrollkästchen für ein nicht zugeordnetes Decorator-Element. Wählen Sie unter Anzeigeeigenschaft die Domäneneigenschaft aus, der Sie das Decorator-Element zuordnen möchten. Ordnen Sie BirthDecorator beispielsweise Birth zu.
Speichern Sie die DSL, klicken Sie auf „Alle Vorlagen transformieren“, und drücken Sie F5.
Vergewissern Sie sich in einem Beispielmodelldiagramm, dass Sie jetzt auf die ausgewählten Positionen klicken und Werte eingeben können. Wenn Sie eine Person-Form auswählen, werden jetzt außerdem die neuen Eigenschaften „Birth“ und „Death“ im Eigenschaftenfenster angezeigt.
In einer TT-Datei können Sie Code hinzufügen, der die Eigenschaften jeder Person abruft.
Definieren neuer Klassen
Sie können einem Modell Domänenklassen und -beziehungen hinzufügen. Sie können beispielsweise eine neue Klasse erstellen, die Städte darstellt, und eine neue Beziehung, die darstellt, dass eine Person in einer Stadt gelebt hat.
Damit die verschiedenen Typen in einem Modelldiagramm unterscheidbar sind, können Sie die Domänenklassen verschiedenen Arten von Formen oder Formen mit unterschiedlicher Geometrie und Farbe zuordnen.
So fügen Sie eine neue Domänenklasse hinzu und zeigen Sie sie an
Fügen Sie eine Domänenklasse als untergeordnetes Element des Modellstamms hinzu.
Klicken Sie im DSL-Definitionsdiagramm auf das Tool Embedding Relationship, klicken Sie dann auf die Stammklasse FamilyTreeModel und anschließend in einen leeren Teil des Diagramms.
Eine neue Domänenklasse, die über eine Embedding Relationship mit „FamilyTreeModel“ verbunden ist, wird angezeigt.
Legen Sie den Namen fest, z. B. Town.
Hinweis
Jede Domänenklasse mit Ausnahme des Modellstamms muss das Ziel von mindestens einer Embedding Relationship sein oder von einer Klasse erben, die das Ziel einer Embedding Relationship ist. Daher ist es in vielen Fällen praktisch, eine Domänenklasse mit dem Tool „Embedding Relationship“ zu erstellen.
Fügen Sie der neuen Klasse eine Domäneneigenschaft hinzu, z. B. Name.
Fügen Sie eine Verweisbeziehung zwischen „Person“ und „Town“ hinzu.
Klicken Sie auf das Tool Verweisbeziehung, auf „Person“ und dann auf „Town“.
Hinweis
Verweisbeziehungen stellen Querverweise zwischen Teilen der Modellstruktur dar.
Fügen Sie eine Form hinzu, um Städte in den Modelldiagrammen darzustellen.
Ziehen Sie eine Geometrieform aus der Toolbox in das Diagramm, und benennen Sie sie um (z. B. in TownShape).
Legen Sie im Eigenschaftenfenster die Felder unter „Darstellung“ für die neue Form fest (z. B. Füllfarbe und Geometrie).
Fügen Sie ein Decorator-Element hinzu, um den Namen der Stadt anzuzeigen, und benennen Sie es in „NameDecorator“ um. Legen Sie die Eigenschaft „Position“ des Decorator-Elements fest.
Ordnen Sie die Domänenklasse „Town“ der Form „TownShape“ zu.
Klicken Sie auf das Tool Diagrammelementzuordnung, auf die Domänenklasse „Town“ und dann auf die Formklasse „TownShape“.
Wählen Sie auf der Registerkarte Decoratorzuordnungen des Fensters DSL-Details den Map Connector aus, aktivieren Sie „NameDecorator“, und legen Sie Anzeigeeigenschaft auf „Name“ fest.
Erstellen Sie einen Verbinder, um die Beziehung zwischen Personen und Städten anzuzeigen.
Ziehen Sie einen Verbinder aus der Toolbox in das Diagramm. Benennen Sie ihn um, und legen Sie die Darstellungseigenschaften fest.
Verwenden Sie das Tool Diagrammelementzuordnung, um den neuen Verbinder mit der Beziehung zwischen Person und Stadt zu verknüpfen.
Erstellen Sie ein Element Tool zum Erstellen einer neuen Stadt.
Erweitern Sie im DSL-Explorer den Knoten Editor und dann Toolboxregisterkarten.
Klicken Sie mit der rechten Maustaste auf <Ihre DSL>, und klicken Sie dann auf Neues Element Tool hinzufügen.
Geben Sie einen Wert für die Eigenschaft Name des neuen Tools an, und legen Sie die Eigenschaft Klasse auf „Town“ fest.
Legen Sie die Eigenschaft Toolbox Icon fest. Klicken Sie auf [...], und wählen Sie im Feld Dateiname eine Symboldatei aus.
Erstellen Sie ein Verbindungstool zum Erstellen eines Links zwischen Städten und Personen.
Klicken Sie mit der rechten Maustaste auf <Ihre DSL>, und klicken Sie dann auf Neues Verbindungstool hinzufügen.
Legen Sie die Eigenschaft „Name“ des neuen Tools fest.
Wählen Sie für die Eigenschaft ConnectionBuilder den Generator aus, der den Namen der Person-Town-Beziehung enthält.
Legen Sie die Eigenschaft Toolbox Icon fest.
Speichern Sie die DSL-Definition, klicken Sie auf Alle Vorlagen transformieren, und drücken Sie dann F5.
Öffnen Sie in der experimentellen Instanz von Visual Studio eine Modelldatei. Verwenden Sie die neuen Tools, um Städte sowie Links zwischen Städten und Personen zu erstellen. Beachten Sie, dass Sie nur zwischen den richtigen Elementtypen Links erstellen können.
Erstellen Sie Code, der die Stadt auflistet, in der die einzelnen Personen leben. Solchen Code können Sie u. a. in Textvorlagen ausführen. Beispielsweise können Sie die vorhandene Datei „Sample.tt“ in der Debuggingprojektmappe so ändern, dass sie den folgenden Code enthält:
<#@ template inherits="Microsoft.VisualStudio.TextTemplating.VSHost.ModelingTextTransformation" debug="true" #> <#@ output extension=".txt" #> <#@ FamilyTree processor="FamilyTreeDirectiveProcessor" requires="fileName='Sample.ftree'" #> <# foreach (Person person in this.FamilyTreeModel.People) { #> <#= person.Name #><#if (person.Town != null) {#> of <#= person.Town.Name #> <#}#> <# foreach (Person child in person.Children) { #> <#= child.Name #> <# } } #>
Wenn Sie die TT-Datei speichern, wird eine untergeordnete Datei erstellt, die die Liste der Personen und ihrer Wohnsitze enthält. Weitere Informationen finden Sie unter Generieren von Code für eine domänenspezifische Sprache.
Validierung und Befehle
Sie können diese DSL weiterentwickeln, indem Sie Validierungseinschränkungen hinzufügen. Bei diesen Einschränkungen handelt es sich um Methoden, die Sie definieren können, um sicherzustellen, dass sich das Modell in einem korrekten Zustand befindet. Sie können beispielsweise eine Einschränkung definieren, die sicherstellt, dass das Geburtsdatum eines Kindes nach dem seiner Eltern liegt. Das Validierungsfeature zeigt eine Warnung an, wenn der DSL-Benutzer versucht, ein Modell zu speichern, das eine der Einschränkungen nicht erfüllt. Weitere Informationen finden Sie unter Validierung in einer domänenspezifischen Sprache.
Sie können auch Menübefehle definieren, die der Benutzer aufrufen kann. Befehle können das Modell ändern. Sie können auch mit anderen Modellen in Visual Studio und mit externen Ressourcen interagieren. Weitere Informationen finden Sie unter Ändern eines Standardmenübefehls.
Bereitstellen der DSL
Damit andere Benutzer die domänenspezifische Sprache verwenden können, verteilen Sie eine VSIX-Datei (Visual Studio-Erweiterung). Diese Datei wird beim Erstellen der DSL-Projektmappe erstellt.
Suchen Sie im Ordner „bin“ Ihrer Projektmappe nach der VSIX-Datei. Kopieren Sie die VSIX-Datei auf den Computer, auf dem Sie sie installieren möchten. Doppelklicken Sie auf diesem Computer auf die VSIX-Datei. Die DSL kann in allen Instanzen von Visual Studio auf diesem Computer verwendet werden.
Auf die gleiche Weise können Sie die DSL auf Ihrem eigenen Computer installieren, damit Sie nicht die experimentelle Instanz von Visual Studio verwenden müssen.
Weitere Informationen finden Sie unter Deploying Domain-Specific Language Solutions (Bereitstellen von Projektmappen für eine domänenspezifische Sprache).
Entfernen alter experimenteller DSLs
Wenn Sie experimentelle DSLs erstellt haben, die Sie nicht mehr benötigen, können Sie sie von Ihrem Computer entfernen, indem Sie die experimentelle Instanz von Visual Studio zurücksetzen.
Dadurch werden alle experimentellen DSLs und andere experimentelle Visual Studio-Erweiterungen von Ihrem Computer entfernt. Dies sind Erweiterungen, die im Debugmodus ausgeführt wurden.
Bei diesem Verfahren werden keine DSLs oder anderen Visual Studio-Erweiterungen entfernt, die durch Ausführen der VSIX-Datei vollständig installiert wurden.
So setzen Sie die experimentelle Instanz von Visual Studio 2019 zurück
Wechseln Sie ins Windows-Startmenü, setzen Sie Visual Studio zurück, und führen Sie dann den Befehl Microsoft Visual Studio Experimental Instance zurücksetzen aus, der Ihrer Version von Visual Studio entspricht.
Erstellen Sie experimentelle DSLs oder andere experimentelle Visual Studio-Erweiterungen, die Sie weiterhin verwenden möchten, neu.