Fonctionnement du code DSLUnderstanding the DSL Code

Une solution DSL (Domain-Specific Language) génère une API que vous pouvez utiliser pour lire et mettre à jour des instances du DSL dans Visual StudioVisual Studio.A Domain-Specific Language (DSL) solution generates an API that you can use to read and update instances of the DSL in Visual StudioVisual Studio. Cette API est définie dans le code généré à partir de la définition DSL.This API is defined in the code that is generated from the DSL definition. Cette rubrique décrit l'API générée.This topic describes the generated API.

Exemple de solution : diagrammes de composantsThe example solution: Component Diagrams

Pour créer la solution qui est la source de la plupart des exemples de cette rubrique, créez une DSL à partir de la composant modèles modèle de solution.To create the solution that is the source of most of the examples in this topic, create a DSL from the Component Models solution template. Il s'agit de l'un des modèles standard qui apparaissent quand vous créez une solution DSL.This is one of the standard templates that appears when you create a new DSL solution.

Note

Le modèle DSL de diagrammes de composant n’est pas lié aux diagrammes de composant UML que vous pouvez créer à l’aide du menu de l’Architecture dans Visual Studio.The Component Diagrams DSL template is not related to the UML component diagrams that you can create by using the Architecture menu in Visual Studio. Dans le nouveau projet boîte de dialogue, développez autres projet Types\Extensibility puis cliquez sur Concepteur de langage spécifique à un domaine.In the New Project dialog box, expand Other Project Types\Extensibility and then click Domain-Specific Language Designer.

Appuyez sur F5 et expérimentez un peu, si vous ne vous êtes pas encore familiarisé avec ce modèle de solution.Press F5 and experiment, if you are not familiar with this solution template. Notez en particulier que pour créer des ports, vous devez faire glisser un outil « port » sur un composant et que vous pouvez connecter des ports.Notice in particular that you create ports by dragging a port tool onto a component, and that you can connect ports.

Composants et ports interconnectésComponents and interconnected ports

Structure de la solution DSLThe Structure of the DSL Solution

Le Dsl projet définit l’API de votre DSL.The Dsl project defines the API for your DSL. Le DslPackage projet définit comment il s’intègre à Visual StudioVisual Studio.The DslPackage project defines how it integrates with Visual StudioVisual Studio. Vous pouvez aussi ajouter vos propres projets, qui peuvent également contenir du code généré à partir du modèle.You can also add your own projects, which can also contain code generated from the model.

Les répertoires de codeThe code directories

La plupart du code dans chacun de ces projets est généré à partir de Dsl\DslDefinition.dsl.Most of the code in each of these projects is generated from Dsl\DslDefinition.dsl. Le code généré est dans le Code généré dossier.The generated code is in the Generated Code folder. Pour afficher un fichier généré, cliquez sur [+] en regard de la génération de .tt fichier.To see a generated file, click [+] next to the generating .tt file.

Nous vous recommandons d'inspecter le code généré pour mieux comprendre le DSL.We recommend that you inspect the generated code to help you understand the DSL. Pour afficher les fichiers générés, développez les fichiers *.tt dans l'Explorateur de solutions.To see the generated files, expand the *.tt files in Solution Explorer.

Le *fichiers .tt contiennent très peu de code de génération.The *.tt files contain very little generating code. Au lieu de cela, ils utilisent des directives <#include> pour inclure des fichiers de modèles partagés.Instead, they use <#include> directives to include shared template files. Vous trouverez les fichiers partagés dans \Program Files\Microsoft Visual Studio 10.0\Common7\IDE\Extensions\Microsoft\DSL SDK\DSL Designer\11.0\TextTemplatesThe shared files can be found in \Program Files\Microsoft Visual Studio 10.0\Common7\IDE\Extensions\Microsoft\DSL SDK\DSL Designer\11.0\TextTemplates

Quand vous ajoutez votre propre code de programme à la solution DSL, ajoutez-le dans un fichier distinct, en dehors du dossier Generated Code.When you add your own program code to the DSL solution, add it in a separate file, outside the Generated Code folder. Vous souhaiterez peut-être créer un Code personnalisé dossier.You might want to create a Custom Code folder. (Quand vous ajoutez un nouveau fichier de code à un dossier personnalisé, n'oubliez pas de corriger l'espace de noms dans le squelette de code initial.)(When you add a new code file to a custom folder, remember to correct the namespace in the initial code skeleton.)

Nous vous recommandons vivement de ne pas modifier le code généré directement, car vos modifications seront perdues quand vous regénérerez la solution.We strongly recommend that you do not edit the generated code directly, because your edits will be lost when you rebuild the solution. Au lieu de cela, pour personnaliser votre DSL :Instead, to customize your DSL:

  • Ajustez les nombreux paramètres dans la définition DSL.Adjust the many parameters in the DSL Definition.

  • Écrivez des classes partielles dans des fichiers de code distincts pour substituer les méthodes qui sont définies dans, ou héritées par, les classes générées.Write partial classes in separate code files, to override methods that are defined in, or inherited by, the generated classes. Dans certains cas, vous devez définir le génère une Double dérivée option d’une classe dans la définition DSL, afin d’être en mesure de substituer une méthode générée.In some cases, you have to set the Generates Double Derived option of a class in the DSL Definition, in order to be able to override a generated method.

  • Définissez les options dans la définition DSL qui provoquent le code généré fournir des 'raccordements de' pour votre propre code.Set options in the DSL Definition that cause the generated code to provide 'hooks' for your own code.

    Par exemple, si vous définissez la a un constructeur personnalisé option d’une classe de domaine et puis générez la solution, vous verrez des messages d’erreur.For example, if you set the Has Custom Constructor option of a domain class, and then build the solution, you will see error messages. Quand vous double-cliquez sur l'un de ces messages d'erreur, des commentaires s'affichent dans le code généré pour expliquer ce que votre code personnalisé doit fournir.When you double-click one of these error messages, you will see comments in the generated code that explain what your custom code should provide.

  • Écrivez vos propres modèles de texte pour générer du code spécifique à votre application.Write your own text templates to generate code specific to your application. Vous pouvez utiliser des fichiers Include pour partager des parties de modèles communes à de nombreux projets et vous pouvez créer des modèles de projets Visual StudioVisual Studio pour configurer des projets initialisés avec votre propre structure de fichiers.You can use include files to share parts of the templates that are common to many projects, and you can create Visual StudioVisual Studio project templates to set up projects that are initialized with your own file structure.

Fichiers générés dans la solution DSLGenerated Files in Dsl

Les fichiers générés suivants s’affichent dans le Dsl projet.The following generated files appear in the Dsl project.

YourDsl Schema.xsdYourDsl Schema.xsd

Schéma pour les fichiers qui contient les instances de votre DSL.The schema for files that contains instances of your DSL. Ce fichier est copié vers la compilation (bin) active.This file is copied to the compilation (bin) directory. Lorsque vous installez votre DSL, vous pouvez copier ce fichier sur \Program Files\Microsoft Visual Studio 11.0\Xml\Schemas afin que les fichiers de modèle peuvent être validés.When you install your DSL, you can copy this file to \Program Files\Microsoft Visual Studio 11.0\Xml\Schemas so that model files can be validated. Pour plus d’informations, consultez déploiement de Solutions de langage spécifique à un domaine.For more information, see Deploying Domain-Specific Language Solutions.

Si vous personnalisez la sérialisation en définissant des options dans l'Explorateur DSL, le schéma changera en conséquence.If you customize serialization by setting options in DSL Explorer, the schema will change accordingly. Toutefois, si vous écrivez votre propre code de sérialisation, ce fichier peut ne plus représenter le schéma réel.However, if you write your own serialization code, this file might no longer represent the actual schema. Pour plus d’informations, consultez personnalisation de stockage de fichier et la sérialisation XML.For more information, see Customizing File Storage and XML Serialization.

ConnectionBuilders.cs

Un générateur de connexion est une classe qui crée des relations.A connection builder is a class that creates relationships. Il s'agit du code derrière un outil de connexion.It is the code behind a connection tool. Ce fichier contient une paire de classes pour chaque outil de connexion.This file contains a pair of classes for each connection tool. Leurs noms sont dérivées des noms de l’outil de connexion et de la relation de domaine : relationgénérateur, et ConnectorToolConnectAction.Their names are derived from the names of the domain relationship and connection tool: RelationshipBuilder, and ConnectorToolConnectAction.

(Dans l'exemple de solution de composant, l'un des générateurs de connexions se nomme ConnectionBuilder. Il s'agit d'une coïncidence, car la relation de domaine se nomme Connection.)(In the component solution example, one of the connection builders is called ConnectionBuilder, This is a coincidence, because the domain relationship is named Connection.)

La relation est créée dans le relation Builder.Connect() (méthode).The relationship is created in the RelationshipBuilder.Connect() method. La version par défaut vérifie que les éléments de modèle cibles et sources sont acceptables, puis elle instancie la relation.The default version verifies that the source and target model elements are acceptable, and then instantiates the relationship. Par exemple :For example:

CommentReferencesSubject(sourceAccepted, targetAccepted);

Chaque classe de générateur est généré à partir d’un nœud dans le générateurs de connexion section dans l’Explorateur de DSL.Each builder class is generated from a node in the Connection Builders section in DSL Explorer. Une méthode Connect peut créer des relations entre une ou plusieurs paires de classes de domaine.One Connect method can create relationships between one or more pairs of domain classes. Chaque paire est définie par une directive de connexion de lien, que vous pouvez trouver dans l'Explorateur DSL sous le nœud du générateur.Each pair is defined by a Link Connect Directive, which you can find in DSL Explorer under the builder node.

Par exemple, vous pourriez ajouter à un générateur de connexion des directives de connexion de lien pour chacun des trois types de relations dans l'exemple de DSL.For example, you could add to one connection builder Link Connect Directives for each of the three types of relationship in the sample DSL. L'utilisateur disposerait ainsi d'un seul outil de connexion.This would provide the user with a single connection tool. Le type de relation instancié dépendrait des types des éléments sources et cibles sélectionnés par l'utilisateur.The type of relationship instantiated would depend on the types of the source and target elements selected by the user. Pour ajouter des directives de connexion de lien, cliquez avec le bouton droit sur un générateur dans l'explorateur DSL.To add Link Connect Directives, right-click a builder in DSL Explorer.

Pour écrire du code personnalisé qui s'exécute quand un type de relation de domaine spécifique est créé, sélectionnez la directive de connexion de lien appropriée sous le nœud du générateur.To write custom code that runs when a specific type of domain relationship is created, select the appropriate Link Connect Directive under the builder node. Dans la fenêtre Propriétés, définissez de connexion personnalisées utilise.In the Properties window, set Uses Custom Connect. Regénérez la solution, puis fournissez le code pour corriger les erreurs résultantes.Rebuild the solution, and then supply code to correct the resulting errors.

Pour écrire un code personnalisé qui s’exécute chaque fois que l’utilisateur utilise cet outil de connexion, définissez la est personnalisé propriété du Générateur de connexion.To write custom code that runs whenever the user uses this connection tool, set the Is Custom property of the connection builder. Vous pouvez fournir du code qui décide si un élément source est permis, si une combinaison spécifique de source et de cible est permise et qui détermine les mises à jour qui doivent être apportées au modèle quand une connexion est établie.You can supply code that decides whether a source element is permitted, whether a specific combination of source and target is permitted, and what updates should be made to the model when a connection is made. Vous pourriez par exemple autoriser une connexion uniquement si elle ne crée pas de boucle dans le diagramme.For example, you could allow a connection only if it would not create a loop in the diagram. Au lieu d'un lien à relation unique, vous pourriez instancier un modèle plus complexe de plusieurs éléments interconnectés entre la source et la cible.Instead of a single relationship link, you could instantiate a more complex pattern of several inter-related elements between the source and target.

Connectors.cs

Contient les classes pour les connecteurs, qui sont les éléments de diagramme qui représentent généralement des relations de référence.Contains the classes for the connectors, which are the diagram elements that typically represent reference relationships. Chaque classe est générée à partir d'un connecteur dans la définition DSL.Each class is generated from one connector in the DSL Definition. Chaque classe de connecteur est dérivée de BinaryLinkShape.Every connector class is derived from BinaryLinkShape

Pour rendre la couleur et une autre variable de fonctionnalités de style en cours d’exécution, avec le bouton droit de la classe sur le diagramme de définition DSL et pointez sur ajouter exposées.To make the color and some other style features variable at run time, right-click the class on the DSL Definition diagram and point to Add Exposed.

Pour rendre variables d'autres fonctionnalités de style au moment de l'exécution, consultez par exemple TextField et ShapeElement.To make additional style features variable at run time, see for example TextField and ShapeElement.

Diagram.cs

Contient la classe qui définit le diagramme.Contains the class that defines the diagram. Elle est dérivée de Diagram.It is derived from Diagram.

Pour rendre la couleur et une autre variable de fonctionnalités de style en cours d’exécution, avec le bouton droit de la classe sur le diagramme de définition DSL et pointez sur ajouter exposées.To make the color and some other style features variable at run time, right-click the class on the DSL Definition diagram and point to Add Exposed.

De plus, ce fichier contient la règle FixupDiagram, qui répond quand un nouvel élément est ajouté au modèle.In addition, this file contains the FixupDiagram rule, which responds when a new element is added to the model. La règle ajoute une nouvelle forme et relie la forme à l'élément de modèle.The rule adds a new shape and links the shape to the model element.

DirectiveProcessor.cs

Ce processeur de directive aide vos utilisateurs à écrire des modèles de texte qui lisent une instance de votre DSL.This directive processor helps your users to write text templates that read an instance of your DSL. Le processeur de directive charge les assemblys (DLL) pour votre DSL et insère des instructions using pour votre espace de noms.The directive processor loads the assemblies (DLLs) for your DSL, and effectively inserts using statements for your namespace. Cela permet au code dans les modèles de texte d'utiliser les classes et les relations que vous avez définies dans votre DSL.This allows the code in the text templates to use the classes and relationships that you have defined in your DSL.

Pour plus d’informations, consultez génération du Code à partir d’un langage spécifique à un domaine et création de processeurs de Directive de modèle personnalisé T4 texte.For more information, see Generating Code from a Domain-Specific Language and Creating Custom T4 Text Template Directive Processors.

DomainClasses.cs

Implémentations des classes de domaine que vous avez définies, y compris les classes abstraites et la classe racine du modèle.Implementations of domain classes that you have defined, including abstract classes and the model root class. Elles sont dérivées de ModelElement.They are derived from ModelElement.

Chaque classe de domaine contient :Each domain class contains:

  • Une définition de propriété et une classe de gestionnaire imbriquée pour chaque propriété de domaine.A property definition and a nested handler class for each domain property. Vous pouvez substituer OnValueChanging() et OnValueChanged().You can override OnValueChanging() and OnValueChanged(). Pour plus d’informations, consultez gestionnaires de modification de valeur de propriété domaine.For more information, see Domain Property Value Change Handlers.

    Dans l'exemple de DSL, la classe Comment contient une propriété Text et une classe de gestionnaire TextPropertyHandler.In the example DSL, the Comment class contains a property Text and a handler class TextPropertyHandler.

  • Des propriétés d'accesseurs pour les relations auxquelles cette classe de domaine participe.Accessor properties for the relationships in which this domain class participates. (Il n'y a pas de classe imbriquée pour les propriétés de rôle.)(There is no nested class for role properties.)

    Dans l'exemple de DSL, la classe Comment à des accesseurs qui accèdent à son modèle parent par l'intermédiaire de la relation d'incorporation ComponentModelHasComments.In the example DSL, the Comment class has accessors that access its parent model through the embedding relationship ComponentModelHasComments.

  • Des constructeurs.Constructors. Si vous souhaitez remplacer ces, définissez a un constructeur personnalisé sur la classe de domaine.If you want to override these, set Has Custom Constructor on the domain class.

  • Des méthodes de gestionnaire EGP (Element Group Prototype).Element Group Prototype (EGP) handler methods. Ces invites est nécessaire si l’utilisateur peut fusion (Ajouter) un autre élément sur les instances de cette classe.These are necessary if the user can merge (add) another element onto instances of this class. En général, l'utilisateur effectue pour cela une opération glisser-déplacer à partir d'un outil d'élément ou d'une autre forme, ou une opération de collage.Typically the user does this by dragging from an element tool or another shape, or by pasting.

    Dans l'exemple de DSL, un port d'entrée ou un port de sortie peuvent être fusionnés sur un composant.In the example DSL, an Input Port or Output Port can be merged onto a Component. De plus, des composants et des commentaires peuvent être fusionnés sur le modèle.Also, Components and Comments can be merged onto the model. La clé publique du signataire doit être fournie à la classeThe

    Les méthodes de gestionnaire EGP dans la classe Components autorisent un composant à accepter des ports, mais pas des commentaires.The EGP handler methods in the Component class allow a Component to accept Ports, but not Comments. Le gestionnaire EGP dans la classe de modèle racine accepte des commentaires et des composants, mais pas des ports.The EGP handler in the root model class accepts Comments and Components, but not Ports.

    DomainModel.cs

    Classe qui représente le modèle du domaine.The class that represents the domain model. Elle est dérivée de DomainModel.It is derived from DomainModel.

Note

Elle est différente de la classe racine du modèle.This is not the same as the root class of the model.

Les fermetures Copier et Supprimer définissent les autres éléments qui doivent être inclus quand un élément est copié ou supprimé.Copy and Delete Closures define what other elements should be included when an element is copied or deleted. Vous pouvez contrôler ce comportement en définissant le propage la copie et propage supprimer propriétés des rôles de chaque côté de chaque relation.You can control this behavior by setting the Propagates Copy and Propagates Delete properties of the roles at each side of every relationship. Si vous voulez que les valeurs soient déterminées de manière dynamique, vous pouvez écrire du code pour substituer les méthodes des classes Closure.If you want the values to be determined dynamically, you can write code to override the methods of the Closure classes.

DomainModelResx.resx

Ce fichier contient des chaînes telles que les descriptions des classes de domaine et des propriétés, des noms de propriétés, des étiquettes de boîte à outils, des messages d'erreur standard et d'autres chaînes qui peuvent être affichées à l'utilisateur.This contains strings such as the descriptions of domain classes and properties, property names, toolbox labels, standard error messages, and other strings that could be displayed to the user. Il contient également des icônes d'outils et des images pour les formes d'images.It also contains tool icons and images for image shapes.

Ce fichier est lié à l'assembly généré et fournit les valeurs par défaut de ces ressources.This file is bound into the built assembly, and provides the default values of these resources. Vous pouvez localiser votre DSL en créant un assembly satellite qui contient une version localisée des ressources.You can localize your DSL by creating a satellite assembly that contains a localized version of the resources. Cette version sera utilisée lors de l'installation de la solution DSL dans une culture correspondant aux ressources localisées.That version will be used when the DSL is installed in a culture matching the localized resources. Pour plus d’informations, consultez déploiement de Solutions de langage spécifique à un domaine.For more information, see Deploying Domain-Specific Language Solutions.

DomainRelationships.cs

Chaque lien entre deux éléments dans un modèle est représentée par une instance d'une classe de relation de domaine.Each link between two elements in a model is represented by an instance of a domain relationship class. Toutes les classes de relations sont dérivées de ElementLink qui, à son tour, est dérivée de ModelElement.All relationship classes are derived from ElementLink, which in turn is derived from ModelElement. S'agissant d'un ModelElement, une instance d'une relation peut avoir des propriétés et peut être la source ou la cible d'une relation.Because it is a ModelElement, an instance of a relationship can have properties and can be the source or target of a relationship.

HelpKeywordHelper.cs

Fournit des fonctions qui sont utilisées quand l'utilisateur appuie sur la touche F1.Provides functions that are used when the user presses F1.

MultiplicityValidation.cs

Dans les rôles de relation où vous spécifiez une multiplicité de 1..1 ou 1..*, l'utilisateur doit être averti qu'au moins une instance de la relation est nécessaire.In relationship roles where you specify a multiplicity of 1..1 or 1..*, the user should be warned that at least one instance of the relationship is required. Ce fichier fournit des contraintes de validation qui implémentent ces avertissements.This file provides validation constraints that implement those warnings. Le lien 1..1 à un parent d'incorporation n'est pas vérifié.The 1..1 link to a embedding parent is not verified.

Pour ces contraintes doit être exécuté, vous devez définir un parmi les utilise... options dans le Editor\Validation nœud dans l’Explorateur DSL.For these constraints to be executed, you must have set one of the Uses... options in the Editor\Validation node in DSL Explorer. Pour plus d’informations, consultez Validation dans un langage spécifique à un domaine.For more information, see Validation in a Domain-Specific Language.

PropertiesGrid.cs

Ce fichier contient du code uniquement si vous avez attaché un descripteur de type personnalisé à une propriété de domaine.This file contains code only if you have attached a Custom Type Descriptor to a domain property. Pour plus d’informations, consultez personnalisation de la fenêtre Propriétés.For more information, see Customizing the Properties Window.

SerializationHelper.cs

  • Méthode de validation permettant de s'assurer que deux éléments ne sont pas référencés par le même moniker.A validation method to ensure that no two elements are referenced by the same moniker. Pour plus d’informations, consultez personnalisation de stockage de fichier et la sérialisation XML.For more information, see Customizing File Storage and XML Serialization.

  • Classe SerializationHelper qui fournit des fonctions utilisées en commun avec les classes de sérialisation.SerializationHelper class, which provides functions that are used in common by the serialization classes.

    Serializer.cs

    Classe de sérialiseur pour chaque modèle, diagramme, connecteur, forme, relation et classe de domaine.A serializer class for each domain class, relationship, shape, connector, diagram, and model.

    La plupart des fonctionnalités de ces classes peuvent être contrôlés par les paramètres dans l’Explorateur DSL sous comportement de sérialisation Xml.Many of the features of these classes can be controlled by the settings in DSL Explorer under Xml Serialization Behavior.

    Shapes.cs

    Classe pour chaque classe de forme dans la définition DSL.A class for every shape class in the DSL Definition. Les formes sont dérivées de NodeShape.Shapes are derived from NodeShape. Pour plus d’informations, consultez personnalisation de stockage de fichier et la sérialisation XML.For more information, see Customizing File Storage and XML Serialization.

    Pour substituer les méthodes générées avec vos propres méthodes dans une classe partielle, définissez génère une Double dérivée pour le connecteur dans la définition DSL.To override the generated methods with your own methods in a partial class, set Generates Double Derived for the connector in the DSL Definition. Pour remplacer un constructeur avec votre propre code, définissez a un constructeur personnalisé.To replace a constructor with your own code, set Has Custom Constructor.

    Pour rendre la couleur et une autre variable de fonctionnalités de style en cours d’exécution, avec le bouton droit de la classe sur le diagramme de définition DSL et pointez sur ajouter exposées.To make the color and some other style features variable at run time, right-click the class on the DSL Definition diagram and point to Add Exposed.

    Pour rendre variables d'autres fonctionnalités de style au moment de l'exécution, consultez par exemple TextField et ShapeElement.To make additional style features variable at run time, see for example TextField and ShapeElement

    ToolboxHelper.cs

    Configure la boîte à outils en installant des prototypes de groupes d'éléments dans les outils d'éléments.Sets up the toolbox by installing element group prototypes into the element tools. Les copies de ces prototypes sont fusionnées avec les éléments cibles quand l'utilisateur exécute l'outil.Copies of these prototypes are merged with the target elements when the user runs the tool.

    Vous pourriez substituer CreateElementPrototype() pour définir un élément de boîte à outils qui crée un groupe de plusieurs objets.You could override CreateElementPrototype() to define a toolbox item that creates a group of several objects. Vous pourriez par exemple définir un élément pour représenter des objets ayant des sous-composants.For example, you could define an item to represent objects that have sub-components. Après avoir modifié le code, réinitialisez l'instance expérimentale de Visual StudioVisual Studio pour effacer le cache de boîte à outils.After changing the code, reset the experimental instance of Visual StudioVisual Studio to clear the toolbox cache.

Fichiers générés dans le projet DslPackageGenerated files in the DslPackage project

DslPackage couple le modèle DSL au shell Visual StudioVisual Studio, qui gère les commandes de menu, de boîte à outils et de fenêtre.DslPackage couples the DSL model to the Visual StudioVisual Studio shell, managing the window, toolbox, and menu commands. La plupart des classes sont dérivées deux fois, ce qui vous permet de substituer n'importe lesquelles de leurs méthodes.Most of the classes are double derived, so that you can override any of their methods.

CommandSet.cs

Commandes de menu contextuel visibles sur le diagramme.The context menu commands that are visible on the diagram. Vous pouvez adapter cet ensemble ou y ajouter des éléments.You can adapt or add to this set. Ce fichier contient le code pour les commandes.This file contains the code for the commands. L'emplacement des commandes dans les menus est déterminé par le fichier Commands.vsct.The location of the commands on menus is determined by the Commands.vsct file. Pour plus d’informations, consultez commandes d’utilisateur de l’écriture et les Actions.For more information, see Writing User Commands and Actions.

Constants.cs

GUID.GUIDs.

DocData.cs

YourDsl DocData gère le chargement et l’enregistrement d’un modèle de fichier et crée l’instance de la banque.YourDsl DocData manages loading and saving a model to file, and creates the Store instance.

Par exemple, si vous voulez enregistrer votre DSL dans une base de données plutôt que dans un fichier, vous pourriez substituer les méthodes Load et Save.For example, if you want to save your DSL in a database instead of a file, you could override Load and Save methods.

DocView.cs

YourDsl DocView gère la fenêtre dans laquelle le diagramme s’affiche.YourDsl DocView manages the window in which the diagram appears. Par exemple, vous pourriez incorporer le diagramme dans un formulaire Windows :For example, you could embed the diagram inside a windows Form:

Ajoutez un fichier Contrôle utilisateur au projet DslPackage.Add a User Control file to the DslPackage project. Ajoutez un panneau dans lequel le diagramme peut être affiché.Add a Panel in which the diagram can be displayed. Ajoutez des boutons et d'autres contrôles.Add buttons and other controls. Dans l'affichage de code du formulaire, ajoutez le code suivant, en ajustant les noms en fonction de votre DSL :In the code view of the form, add the following code, adjusting the names to your DSL:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Microsoft.VisualStudio.Modeling;
using Microsoft.VisualStudio.Modeling.Shell;

namespace Company.EmbedInForm
{
  public partial class UserControl1 : UserControl
  {
    public UserControl1()
    {
      InitializeComponent();
    }

    private DiagramDocView docView;

    public UserControl1(DiagramDocView docView, Control content)
      : this()
    {
      this.docView = docView;
      panel1.Controls.Add(content);
    }

    private void button1_Click(object sender, EventArgs e)
    {
      ExampleModel modelRoot = this.docView.CurrentDiagram.ModelElement as ExampleModel;
      foreach (ExampleElement element in modelRoot.Elements)
      {
       listBox1.Items.Add(element.Name);
      }
    }
  }
  internal partial class EmbedInFormDocView
  {

    private ContainerControl container;

    /// <summary>
    /// Return a User Control instead of the DSL window.
    /// The user control will contain the DSL window.
    /// </summary>

    public override System.Windows.Forms.IWin32Window Window
    {
      get
      {
        if (container == null)
        {
          // Put the normal DSL Window inside our control
          container = new UserControl1(this, (Control)base.Window);
        }
        return container;
      }
    }
  }

}

EditorFactory.cs

Instancie DocData et DocView.Instantiates DocData and DocView. Fournit une interface standard utilisée par Visual StudioVisual Studio pour ouvrir un éditeur au démarrage de votre package DSL.It fulfills a standard interface that Visual StudioVisual Studio uses to open an editor when your DSL package starts. Il est référencé dans l'attribut ProvideEditorFactory dans Package.cs.It is referenced in the ProvideEditorFactory attribute in Package.cs

GeneratedVSCT.vsct

Localise les commandes de menu standard dans les menus, tels que le menu contextuel du diagramme, le modifier menu et ainsi de suite.Locates the standard menu commands on menus, such as the diagram context menu, the Edit menu, and so on. Le code pour les commandes se trouve dans CommandSet.cs.The code for the commands is in CommandSet.cs. Vous pouvez déplacer ou modifier les commandes standard et vous pouvez ajouter vos propres commandes.You can relocate or modify the standard commands, and you can add your own commands. Pour plus d’informations, consultez commandes d’utilisateur de l’écriture et les Actions.For more information, see Writing User Commands and Actions.

ModelExplorer.cs

Définit l'Explorateur de modèles pour votre DSL.Defines the Model Explorer for your DSL. Il s'agit de l'arborescence du modèle vue par l'utilisateur à côté du diagramme.This is the tree view of the model that the user sees alongside the diagram.

Par exemple, vous pourriez substituer InsertTreeView() pour changer l'ordre dans lequel les éléments apparaissent dans l'Explorateur de modèles.For example, you could override InsertTreeView() to change the order in which elements appear in the Model Explorer.

Si vous souhaitez que la sélection dans l'Explorateur de modèles soit synchronisée avec la sélection du diagramme, vous pouvez utiliser le code suivant :If you want the selection in the model explorer to keep synchronized with the diagram selection, you could use the following code:

protected override void OnSelectionChanged(global::System.EventArgs e)
{
base.OnSelectionChanged(e);
// get the selected element
DslModeling::ModelElement selectedElement =
this.PrimarySelection as DslModeling::ModelElement;
// Select in the model explorer
SelectInModelExplorer<YOURLANGUAGEExplorerToolWindow>(selectedElement);
}
private void SelectInModelExplorer<T>(DslModeling::ModelElement modelElement)
where T : DslShell.ModelExplorerToolWindow
{
DslShell::ModelingPackage package =
this.GetService(typeof(VSShell.Package)) as DslShell::ModelingPackage;

if (package != null)
{
// find the model explorer window
T explorerWindow = package.GetToolWindow(typeof(T), true) as T;
if (explorerWindow != null)
{
// get the tree container
DslShell.ModelExplorerTreeContainer treeContainer =
explorerWindow.TreeContainer;
// find the tree node
DslShell.ExplorerTreeNode treeNode =
treeContainer.FindNodeForElement(modelElement);
// select the node
explorerWindow.TreeContainer.ObjectModelBrowser.SelectedNode = treeNode;
}
}
}

ModelExplorerToolWindow.cs

Définit la fenêtre dans laquelle l'Explorateur de modèles est affiché.Defines the window in which the model explorer is displayed. Gère la sélection des éléments dans l'explorateur.Handles the selection of items in the explorer.

Package.cs

Ce fichier définit l'intégration de la solution DSL à Visual StudioVisual Studio.This file defines how the DSL integrates into Visual StudioVisual Studio. Les attributs sur la classe de package inscrivent la solution DSL comme gestionnaire pour les fichiers ayant votre extension de fichier, définissent sa boîte à outils et définissent comment ouvrir une nouvelle fenêtre.Attributes on the package class register the DSL as the handler for files that have your file extension, define its toolbox, and define how to open a new window. La méthode Initialize() est appelée une fois quand la première solution DSL est chargée dans une instance de Visual StudioVisual Studio.The Initialize() method is called one time when the first DSL is loaded into a Visual StudioVisual Studio instance.

Source.extension.vsixmanifest

Pour personnaliser ce fichier, modifiez le fichier .tt.To customize this file, edit the .tt file.

Avertissement

Si vous modifiez le fichier .tt pour inclure des ressources telles que des icônes et des images, assurez-vous que la ressource est incluse dans la build VSIX.If you edit the .tt file to include resources such as icons or images, make sure that the resource is included in the VSIX build. Dans l’Explorateur de solutions, sélectionnez le fichier et vérifiez que le inclure dans VSIX propriété est True.In Solution Explorer, select the file and make sure that the Include in VSIX property is True.

Ce fichier contrôle comment la solution DSL est empaquetée dans un fichier VSIX (Visual Studio Integration Extension).This file controls how the DSL is packaged into a Visual Studio Integration Extension (VSIX). Pour plus d’informations, consultez déploiement de Solutions de langage spécifique à un domaine.For more information, see Deploying Domain-Specific Language Solutions.

Voir aussiSee Also