Condividi tramite


Introduzione alle lingue di Domain-Specific

Questo argomento illustra i concetti di base nella definizione e nell'uso di un linguaggio specifico del dominio creato con Modeling SDK per Visual Studio.

Annotazioni

Text Template Transformation SDK e Visual Studio Modeling SDK vengono installati automaticamente quando si installano funzionalità specifiche di Visual Studio. Per altri dettagli, vedere questo post di blog.

Se sei nuovo ai DSL, ti consigliamo di lavorare con il Lab VMSDK, che puoi trovare in questo repository

Cosa è possibile fare con un linguaggio Domain-Specific?

Un linguaggio specifico del dominio è una notazione, in genere grafica, progettata per essere usata per uno scopo specifico. Al contrario, i linguaggi come UML sono per utilizzo generico. In un linguaggio DSL è possibile definire i tipi di elemento del modello e le relative relazioni e come vengono presentati sullo schermo.

Dopo aver progettato un linguaggio DSL, è possibile distribuirlo come parte di un pacchetto VSIX (Visual Studio Integration Extension). Gli utenti lavorano con il linguaggio DSL in Visual Studio:

Diagramma dell'albero genealogico, casella degli strumenti ed esploratore

La notazione fa solo parte di un linguaggio DSL. Insieme alla notazione, il pacchetto VSIX include strumenti che gli utenti possono applicare per aiutarli a modificare e generare materiale dai propri modelli.

Una delle principali applicazioni di DSLS consiste nel generare codice di programma, file di configurazione e altri artefatti. Soprattutto nei progetti di grandi dimensioni e nelle linee di prodotto, in cui verranno create diverse varianti di un prodotto, generando molti degli aspetti variabili delle DSL può fornire un notevole aumento dell'affidabilità e una risposta molto rapida ai cambiamenti dei requisiti.

La parte restante di questa panoramica è una procedura dettagliata che introduce le operazioni di base di creazione e uso di un linguaggio specifico del dominio in Visual Studio.

Prerequisiti

Per definire un linguaggio DSL, è necessario aver installato i componenti seguenti:

Componente Link
Visual Studio (qualsiasi edizione) http://go.microsoft.com/fwlink/?LinkId=185579
Selezionare il carico di lavoro sviluppo di estensioni di Visual Studio (include Visual Studio SDK) https://go.microsoft.com/fwlink/?linkid=2166172
Modeling SDK (non installato per impostazione predefinita)
Progettazione classi (non installata per impostazione predefinita) Sezione "Strumenti di codice" nella scheda Singoli componenti del programma di installazione

Annotazioni

Il componente Trasformazione modello di testo viene installato automaticamente come parte del carico di lavoro di sviluppo di estensioni per Visual Studio. È anche possibile installarlo dalla scheda Singoli componenti del programma di installazione di Visual Studio, nella categoria SDK, librerie e framework . Installare il componente Modeling SDK dalla scheda Singoli componenti .

Creare una soluzione DSL

Per creare un nuovo linguaggio specifico del dominio, creare una nuova soluzione di Visual Studio usando il modello di progetto Domain-Specific Language.

  1. Scegliere Nuovo dal menu File e quindi fare clic su Progetto.

  2. Creare un nuovo progetto.

    • Nel campo di ricerca digitare dominio

    • Fare clic suDomain-Specific Language Designer e quindi su Avanti.

    Creare un nuovo progetto DSL

  3. Configurare il nuovo progetto.

    Configurare il nuovo progetto

    • Nella casella Nome progetto digitare FamilyTree. Clicca su Crea.
  4. Si apre il Wizard Progettazione Linguaggio Specifico del Dominio, e viene visualizzato un elenco di soluzioni DSL template.

    Modello di linguaggio minimo

    • Fare clic su ogni modello per visualizzare una descrizione,

    I modelli sono utili punti di partenza. Ognuno di essi fornisce un DSL funzionante completo, che è possibile modificare in base alle proprie esigenze. In genere, è consigliabile scegliere il modello più vicino a quello che si vuole creare.

    • Per questa procedura dettagliata, scegliere il modello Lingua minima . Fare clic su Avanti.
  5. Definisci nuovo tipo di file modello

    Definire il nuovo tipo di file del modello

    • Immettere un'estensione del nome file ftree per il tuo DSL nel campo Quale estensione devono usare i file di modello?. Questa è l'estensione che i file contenenti istanze del tuo DSL utilizzeranno.

    Importante

    È necessario scegliere un'estensione che non sia associata ad alcuna applicazione né nel computer né in qualsiasi altro computer su cui si desidera installare il linguaggio DSL. Ad esempio, docx e htm sarebbero inaccettabili estensioni di file. L'installazione guidata avvisa, se l'estensione immessa viene utilizzata come DSL. In questo caso è consigliabile usare un'estensione del nome file diversa. È anche possibile reimpostare l'istanza sperimentale di Visual Studio SDK per cancellare le vecchie finestre di progettazione sperimentali. Nel menu Start di Windows digitare Reimposta Visual Studio e quindi eseguire il comando Reimposta istanza sperimentale di Microsoft Visual Studio corrispondente alla versione di Visual Studio.

  6. Esaminare le altre pagine (fare clic su Avanti) e quindi fare clic su Fine.

    Riepilogo della soluzione DSL

    Viene generata una soluzione che contiene due progetti. Sono denominati Dsl e DslPackage. Verrà aperto un file diagramma denominato DslDefinition.dsl.

    Annotazioni

    La maggior parte del codice che è possibile visualizzare nelle cartelle nei due progetti viene generata da DslDefinition.dsl. Per questo motivo, la maggior parte delle modifiche al linguaggio DSL viene apportata in questo file.

L'interfaccia utente ora è simile all'immagine seguente.

Progettista DSL

Questa soluzione definisce un linguaggio specifico del dominio. Per altre informazioni, vedere Panoramica dell'interfaccia utente degli strumenti di linguaggio Domain-Specific.

Le parti importanti della soluzione DSL

Si notino gli aspetti seguenti della nuova soluzione:

  • Dsl\DslDefinition.dsl Si tratta del file visualizzato quando si crea una soluzione DSL. Quasi tutto il codice nella soluzione viene generato da questo file e la maggior parte delle modifiche apportate a una definizione DSL viene apportata qui. Per altre informazioni, vedere Uso del diagramma delle definizioni DSL.

  • Progetto Dsl Questo progetto contiene codice che definisce il linguaggio specifico del dominio.

  • Progetto DslPackage Questo progetto contiene codice che consente l'apertura e la modifica delle istanze del linguaggio DSL in Visual Studio.

Esecuzione del linguaggio DSL

È possibile eseguire la soluzione DSL non appena è stata creata. Successivamente, è possibile modificare gradualmente la definizione DSL, eseguendo di nuovo la soluzione dopo ogni modifica.

Per fare esperimenti con il linguaggio DSL

  1. Scegliere Trasforma tutti i modelli T4 dal menu Compila . Questa operazione rigenera la maggior parte del codice sorgente da DslDefinition.dsl.

    Annotazioni

    Ogni volta che si modifica DslDefinition.dsl, è necessario fare clic su Trasforma tutti i modelli T4 prima di ricompilare la soluzione. È possibile automatizzare questo passaggio. Per altre informazioni, vedere Come automatizzare la trasformazione di tutti i modelli.

  2. Premere F5 oppure scegliere Avvia debug dal menu Debug.

    Il linguaggio DSL viene compilato e installato nell'istanza sperimentale di Visual Studio.

    Viene avviata un'istanza sperimentale di Visual Studio. L'istanza sperimentale accetta le impostazioni da un sottoalbero separato del Registro di sistema, in cui le estensioni di Visual Studio vengono registrate a scopo di debug. Le normali istanze di Visual Studio non hanno accesso alle estensioni registrate in questa posizione.

  3. Nell'istanza sperimentale di Visual Studio aprire il file del modello denominato Sample.ftree da Esplora soluzioni.

    o

    Fare clic con il pulsante destro del mouse sul progetto debug, scegliere Aggiungi, quindi fare clic su Nuovo elemento. Nella finestra di dialogo Aggiungi nuovo elemento selezionare il tipo di file DSL (FamilyTree nell'esempio).

    Il file del modello viene aperto come diagramma vuoto.

    La casella degli strumenti si apre e visualizza gli strumenti appropriati per il tipo di diagramma. In alternativa, è possibile visualizzare la casella degli strumenti facendo clic sul menu Visualizza/Casella degli strumenti.

  4. Usare gli strumenti per creare forme e connettori nel diagramma.

    1. Per creare forme, trascinare lo strumento Forma di esempio sul diagramma.

    2. Per connettere due forme, fare clic sullo strumento Connettore di esempio, fare clic sulla prima forma e quindi fare clic sulla seconda forma.

  5. Fare clic sulle etichette delle forme per modificarle.

La tua versione sperimentale di Visual Studio assomiglierà all'esempio seguente:

Albero di esempio di linguaggio specifico del dominio in Visual Studio

Contenuto di un modello

Il contenuto di un file che è un'istanza di un linguaggio DSL è denominato modello. Il modello contiene elementidel modello e collegamenti tra gli elementi. La definizione DSL specifica quali tipi di elementi del modello e collegamenti possono esistere nel modello. Ad esempio, in un linguaggio DSL creato dal modello Linguaggio minimo è presente un tipo di elemento del modello e un tipo di collegamento.

La definizione DSL può specificare la modalità di visualizzazione del modello in un diagramma. È possibile scegliere tra diversi stili di forme e connettori. È possibile specificare che alcune forme vengano visualizzate all'interno di altre forme.

È possibile visualizzare un modello come albero nella visualizzazione Explorer durante la modifica di un modello. Quando si aggiungono forme al diagramma, gli elementi del modello vengono visualizzati anche nello strumento di esplorazione. Lo strumento di esplorazione può essere usato anche se non è presente alcun diagramma.

Se non riesci a visualizzare l'Explorer nell'istanza di debug di Visual Studio, nel menu Visualizza punta a Altre finestre, e quindi fai clic su Explorer della tua lingua.

l'API del tuo DSL

Il tuo DSL genera un'API che consente di leggere e aggiornare i modelli che sono istanze del DSL. Un'applicazione dell'API consiste nel generare file di testo da un modello. Per altre informazioni, vedere Design-Time generazione di codice tramite modelli di testo T4.

Nella soluzione debug aprire i file modello con estensione ".tt". Questi esempi illustrano come generare testo dai modelli e consentono di testare l'API del linguaggio DSL. Uno degli esempi è scritto in Visual Basic, l'altro in Visual C#.

Sotto ciascun file modello si trova il file che genera. Espandere il file modello in Esplora soluzioni e aprire il file generato.

Il file modello contiene un breve segmento di codice che elenca tutti gli elementi nel modello.

Il file generato contiene il risultato.

Quando si modifica un file di modello, verranno visualizzate le modifiche corrispondenti nei file generati dopo la rigenerazione dei file.

Per rigenerare i file di testo dopo aver modificato il file del modello

  1. Nell'istanza sperimentale di Visual Studio salvare il file del modello.

  2. Assicurarsi che il parametro del nome file in ogni file con estensione tt faccia riferimento al file di modello usato per gli esperimenti. Salvare il file con estensione tt.

  3. Scegliere Trasforma tutti i modelli T4 dal menu Compila .

    o

    Fare clic con il pulsante destro del mouse sui modelli da rigenerare e quindi scegliere Esegui strumento personalizzato.

È possibile aggiungere un numero qualsiasi di file di modello di testo a un progetto. Ogni modello genera un file di risultati.

Annotazioni

Quando si modifica la definizione DSL, il codice del modello di testo di esempio non funzionerà, a meno che non venga aggiornato.

Per altre informazioni, vedere Generazione di codice da un linguaggio di Domain-Specific e scrittura di codice per personalizzare un linguaggio Domain-Specific.

Personalizzazione del DSL

Quando si vuole modificare la definizione DSL, chiudere l'istanza sperimentale e aggiornare la definizione nell'istanza principale di Visual Studio.

Annotazioni

Dopo aver modificato la definizione DSL, è possibile che si perdano informazioni nei modelli di test creati usando le versioni precedenti. Ad esempio, la soluzione di debug contiene un file denominato Sample, che contiene alcune forme e connettori. Dopo aver iniziato a sviluppare la definizione DSL, non saranno visibili e andranno persi quando si salva il file.

È possibile realizzare un'ampia gamma di estensioni per DSL. Gli esempi seguenti ti daranno un'impressione delle possibilità.

Dopo ogni modifica, salvare la definizione DSL, fare clic su Trasforma tutti i modelli T4 dal menu Compila e quindi premere F5 per sperimentare il linguaggio DSL modificato.

Rinominare i tipi e gli strumenti

Rinominare le classi e le relazioni di dominio esistenti. Ad esempio, a partire da una definizione DSL creata dal modello del linguaggio minimo, è possibile eseguire le operazioni di rinominazione seguenti per fare in modo che il DSL rappresenti alberi genealogici.

Per rinominare classi di dominio, relazioni e strumenti

  1. Nel diagramma DslDefinition rinominare ExampleModel in FamilyTreeModel, ExampleElement in Person, Targets in Children (e Name in Parent), Sources in Parents (e Name in Child), Elements in People e la DomainRelationship PersonReferencesChildren in ParentsHaveChildren. Rinominare anche l'elemento del diagramma ExampleConnector in ChildConnector. È possibile fare clic su ogni etichetta per modificarla.

    Diagramma delle definizioni DSL - Modello ad albero di famiglia

  2. Rinominare l'elemento e gli strumenti del connettore.

    1. Aprire la finestra Esplora DSL facendo clic sulla scheda in Esplora soluzioni. Se non è possibile visualizzarla, scegliere Altre finestre dal menu Visualizza e quindi fare clic su Esplora DSL. Dsl Explorer è visibile solo quando il diagramma di definizione DSL è la finestra attiva.

    2. Aprire la finestra delle Proprietà e posizionarla in modo che sia possibile visualizzare contemporaneamente DSL Explorer e Proprietà.

    3. In Esplora DSL, espandi Editor, Schede degli strumenti, <il tuo DSL> e quindi Strumenti.

    4. Fare clic su ExampleElement. Si tratta dell'elemento della casella degli strumenti usato per creare elementi.

    5. Nella finestra Proprietà modificare la proprietà Name in Person.

      Si noti che anche la proprietà Caption viene modificata .

    6. Allo stesso modo, modificare il nome dello strumento ExampleRelationship in ChildLink. Modificare la proprietà Caption in modo che non sia una copia della proprietà Name. Ad esempio, immettere Link figlio.

  3. Ricostruire il DSL.

    1. Salvare il file di definizione DSL.

    2. Scegliere Trasforma tutti i modelli T4 dal menu Compila .

    3. Premere F5. Attendere che venga visualizzata l'istanza sperimentale di Visual Studio.

  4. Nella soluzione Debug nell'istanza sperimentale di Visual Studio aprire un file di modello Test.ftree . Trascina gli elementi dalla casella degli strumenti. Si noti che le didascalie degli strumenti e i nomi dei tipi in Toobox sono stati modificati.

  5. Salvare il file del modello.

  6. In Esplora soluzioni, aprire un file con estensione .tt (FamilyTreeReport.tt) e sostituire le occorrenze dei nomi di tipo e proprietà precedente con i nuovi nomi.

  7. Assicurarsi che il nome file specificato nel file con estensione tt specifichi il modello di test.

<#@ template inherits="Microsoft.VisualStudio.TextTemplating.VSHost.ModelingTextTransformation" #>
<#@ output extension=".txt" #>
<#@ FamilyTree processor="FamilyTreeDirectiveProcessor" requires="fileName='Test.ftree'" #>

Generated material. Generating code in C#.

<#
  // When you change the DSL Definition, some of the code below may not work.

  foreach (Person person in this.FamilyTreeModel.People)
  {
#>
	<#= person.Name #>
<#    
  }
#>
  1. Salvare il file con estensione tt. Fare clic su OK nella finestra di dialogo Avviso di sicurezza. Aprire il file generato per visualizzare il risultato dell'esecuzione del codice nel file con estensione tt. Verificare che sia corretto.

Chiudere l'istanza sperimentale di Visual Studio.

Aggiungere proprietà di dominio alle classi

Aggiungere proprietà a una classe di dominio, ad esempio per rappresentare gli anni di nascita e la morte di una persona.

Per rendere visibili le nuove proprietà nel diagramma, è necessario aggiungere decoratori alla forma che visualizza l'elemento del modello. È inoltre necessario eseguire il mapping delle proprietà ai decoratori.

Per aggiungere proprietà e visualizzarle
  1. Aggiungere le proprietà.

    1. Nel diagramma definizione DSL fare clic con il pulsante destro del mouse sulla classe di dominio Person , scegliere Aggiungi e quindi fare clic su Proprietà dominio.

    2. Digitare un elenco di nuovi nomi di proprietà, ad esempio BirthYear e DeathYear. Premere INVIO dopo ognuno di essi. Selezionare ogni nuova proprietà di dominio e nella finestra Proprietà impostare il campo Tipo su Int32.

  2. Aggiungere elementi decoratori che visualizzeranno le proprietà nella forma.

    1. Seguire la linea grigia che si estende dalla classe di dominio Person all'altro lato del diagramma. Si tratta di una mappa degli elementi del diagramma. Collega la classe di dominio a una classe di forma. Rinominare ExampleShape in PersonShape e modificare il campo Geometry in RoundedRectangle nelle proprietà.

    2. Fare clic con il pulsante destro del mouse su questa classe di forma, scegliere Aggiungi, quindi fare clic su Decorator di testo.

    3. Aggiungere due decorator con nomi come BirthDecorator e DeathDecorator. Aggiungere un altro decoratore di testo con nome Dash e impostare la proprietà Default Text sul valore -- (due trattini).

    4. Selezionare ciascun nuovo decorator e, nella finestra Proprietà, impostare il campo Posizione. Determina la posizione in cui verrà visualizzato il valore della proprietà di dominio nella forma. Ad esempio, impostare InnerBottomLeft e InnerBottomRight rispettivamente per BirthDecorator e DeathDecorator. Per Dash impostare la proprietà Position su InnerBottomCenter.

      Definizione della forma compartimento

  3. Mappa i decoratori alle proprietà.

    1. Aprire la finestra Dettagli DSL. Si trova in genere in una scheda accanto alla finestra Output. Se non è possibile visualizzarla, scegliere Altre finestre dal menu Visualizza e quindi fare clic su Dettagli DSL.

    2. Nel diagramma delle definizioni DSL fare clic sulla riga che connette la classe di dominio Person alla classe shape.

    3. In Dettagli DSL, nella scheda Mappe Decorator, seleziona la casella di controllo su un decorator non mappato. In Proprietà di visualizzazione selezionare la proprietà di dominio a cui si vuole eseguire il mapping. Ad esempio, mappare BirthDecorator a BirthYear. Mappa anche la proprietà del dominio DeathYear al loro elemento decorator di testo.

Mapping della proprietà dominio al decoratore di testo

  1. Salva il modello DSL, clicca su Trasforma tutti i modelli T4 nel menu Compila e premi F5.

  2. Aggiungere un nuovo elemento FamilyTree con il nome Tudors.ftree nel progetto debug . Nel diagramma del modello Tudors.ftree aggiungere nuove Persone, Collegamenti Figlio e verificare che sia ora possibile fare clic sulle posizioni scelte e inserire valori. Inoltre, quando si seleziona una forma Persona , nella finestra Proprietà vengono visualizzate le nuove proprietà Anno di nascita e Anno di morte.

Tudors

  1. In un file con estensione tt è possibile aggiungere codice che ottiene le proprietà di ogni persona. FamilyTreeReport.tt:
<#@ template inherits="Microsoft.VisualStudio.TextTemplating.VSHost.ModelingTextTransformation" #>
<#@ output extension=".txt" #>
<#@ FamilyTree processor="FamilyTreeDirectiveProcessor" requires="fileName='Tudors.ftree'" #>

Generated material.

<#
  // When you change the DSL Definition, some of the code below may not work.

  foreach (Person person in this.FamilyTreeModel.People)
  {
#>
	<#= person.Name #> (<#= person.BirthYear #> - <#= person.DeathYear #>)
<#    
  }
#>

FamilyTreeReport.txt generato:


Generated material.

	Henry VIII (1491 - 1547)
	Mary I (1516 - 1558)
	Elizabeth I (1533 - 1603)

Definire nuove classi

È possibile aggiungere classi di dominio e relazioni a un modello. Ad esempio, è possibile creare una nuova classe per rappresentare le città e una nuova relazione per rappresentare che una persona viveva in una città.

Per fare in modo che i diversi tipi siano distinti in un diagramma modello, è possibile eseguire il mapping delle classi di dominio a diversi tipi di forma o a forme con geometria e colori diversi.

Per aggiungere e visualizzare una nuova classe di dominio
  1. Aggiungere una classe di dominio e impostarla come figlio della radice del modello.

    1. Aprire il diagramma di definizione DSL (DslDefinition.dsl). Nella casella degli strumenti fare clic sullo strumento Relazione di incorporamento, fare clic sulla classe radice FamilyTreeModel nel diagramma di definizione DSL e poi fare clic su una parte vuota del diagramma.

      Viene visualizzata una nuova classe di dominio connessa a FamilyTreeModel con una relazione di incorporamento.

      Impostarne il nome, ad esempio Town.

      Annotazioni

      Ogni classe di dominio ad eccezione della radice del modello deve essere la destinazione di almeno una relazione di incorporamento oppure deve ereditare da una classe che è la destinazione di un incorporamento. Per questo motivo, è spesso conveniente creare una classe di dominio utilizzando lo strumento di Relazione di Embedding.

    2. Aggiungere una proprietà di dominio alla nuova classe, ad esempio Name.

  2. Aggiungere una relazione di riferimento tra Persona e Città.

    1. Fare clic sullo strumento Relazione di riferimento , fare clic su Città e quindi su Persona.

    2. Rinominare la relazione TownReferencesPersons con Residence.

    3. Rinominare Persone a sinistra di Residenza in Residenti, e Città in Residenze sulla destra.

      Frammento di definizione DSL: radice dell'albero di famiglia

      Annotazioni

      Le relazioni di riferimento rappresentano riferimenti incrociati da una parte dell'albero del modello a un'altra.

  3. Aggiungere una forma per rappresentare le città nei diagrammi del modello.

    1. Trascinare una forma Geometry dalla casella degli strumenti al diagramma e rinominarla, ad esempio TownShape.

    2. Nella finestra Proprietà impostare i campi Aspetto della nuova forma, ad esempio Colore riempimento e Geometria.

    3. Aggiungere un elemento Decorator di testo per visualizzare il nome della città e rinominarlo NameDecorator. Impostarne la proprietà Position.

  4. Mappare la classe di dominio Town a TownShape.

    1. Fare clic sullo strumento Diagramma mappa elementi , quindi fare clic sulla classe di dominio Town e quindi sulla classe di forma TownShape.

    2. Nella scheda Mappe Decorator della finestra Dettagli DSL con il connettore mappa selezionato selezionare NameDecorator e impostare Display Property (Proprietà di visualizzazione ) su Name (Nome).

  5. Creare un connettore per visualizzare la relazione tra Person e Towns.

    1. Trascinare un connettore dalla casella degli strumenti al diagramma. Rinominarlo e impostarne le proprietà di aspetto.

    2. Usare lo strumento Mappa degli Elementi del Diagramma per collegare il nuovo connettore alla relazione tra Persona e Città.

      Definizione dell'albero di famiglia con mappa delle forme aggiunta

  6. Creare uno strumento per creare un nuovo comune.

    1. In Esplora DSL, espandi Editor e quindi Schede della Casella degli Strumenti.

    2. Fare clic con il pulsante destro del mouse su <DSL> e quindi scegliere Aggiungi Nuovo Strumento.

    3. Impostare la proprietà Name del nuovo strumento e impostarne la proprietà Class su Town.

    4. Impostare la proprietà Icona casella degli strumenti . Fare clic su [...] e nel campo Nome file selezionare un file di icona "Risorse\ExampleShapeToolBitmap.bmp".

  7. Creare uno strumento connettore per creare un collegamento tra città e persone.

    1. Fare clic con il pulsante destro del mouse su <DSL> e quindi fare clic su Aggiungi nuovo strumento di connessione.

    2. Impostare la proprietà Name del nuovo strumento.

    3. Nella proprietà ConnectionBuilder selezionare ResidenceBuilder.

    4. Impostare l'icona della casella degli strumenti (file "Risorse\ExampleConnectorToolBitmap.bmp").

  8. Salvare la definizione DSL, fare clic su Trasforma tutti i modelli T4 e quindi premere F5.

  9. Nell'istanza sperimentale di Visual Studio aprire un file di modello Tudors.ftree. Utilizzare i nuovi strumenti per creare città e collegamenti tra città e persone. Si noti che è possibile creare collegamenti solo tra i tipi di elemento corretti.

  10. Crea codice che elenca la città in cui vive ogni persona. I modelli di testo sono una delle posizioni in cui è possibile eseguire tale codice. Ad esempio, è possibile modificare il file di FamilyTreeReport.tt esistente nella soluzione debug in modo che contenga il codice seguente:

<#@ template inherits="Microsoft.VisualStudio.TextTemplating.VSHost.ModelingTextTransformation" #>
<#@ output extension=".txt" #>
<#@ FamilyTree processor="FamilyTreeDirectiveProcessor" requires="fileName='Tudors.ftree'" #>


<#
foreach (Person person in this.FamilyTreeModel.People)
{
#>
<#= person.Name #> (<#= person.BirthYear #> - <#= person.DeathYear #>) 
<#if (person.Residences != null) #> Residences:<#
foreach(Town town in person.Residences) {#><#= town.Name #>,<#}
#>
<#if (person.Children.Count > 0)
{#>

 Children:
<#
foreach(Person child in person.Children)
{
#>
	<#= child.Name #>
<#
}
}
#>

<#
}
#>
  

È possibile ottenere diagramma classi per comprendere la struttura della classe e usarla nei file *.tt. Fare clic con il pulsante destro del mouse sul DomainClasses.cs (il file sussidiario di DomainClasses.tt) e quindi scegliere il comando Visualizza diagramma classi .

Diagramma classi di dominio

Quando si salva il file *.tt, verrà creato un file sussidiario che contiene l'elenco di persone e le loro residenze. Per altre informazioni, vedere Generazione di codice da un linguaggio Domain-Specific.

Convalida e comandi

È possibile sviluppare ulteriormente questo linguaggio DSL aggiungendo vincoli di convalida. Questi vincoli sono metodi che è possibile definire, che assicurano che il modello sia in uno stato corretto. Ad esempio, è possibile definire un vincolo per assicurarsi che la data di nascita di un bambino sia successiva a quella dei genitori. La funzionalità di convalida visualizza un avviso se l'utente DSL tenta di salvare un modello che interrompe uno dei vincoli. Per altre informazioni, vedere Convalida in un linguaggio di Domain-Specific.

È anche possibile definire i comandi di menu che l'utente può richiamare. I comandi possono modificare il modello. Possono anche interagire con altri modelli in Visual Studio e con risorse esterne. Per altre informazioni, vedere Procedura: Modificare un comando di menu standard.

Distribuzione del DSL

Per consentire ad altri utenti di usare il linguaggio specifico del dominio, distribuire un file di estensione di Visual Studio (VSIX). Questo viene creato quando si compila la soluzione DSL.

Individuare il file vsix nella cartella bin della soluzione. Copiarlo nel computer in cui si desidera installarlo. Nel computer fare doppio clic sul file VSIX. Il linguaggio DSL può essere usato in tutte le istanze di Visual Studio in tale computer.

È possibile usare la stessa procedura per installare il linguaggio DSL nel proprio computer in modo che non sia necessario usare l'istanza sperimentale di Visual Studio.

Per ulteriori informazioni, consultare Distribuzione di soluzioni linguistiche specifiche del dominio.

Rimozione di vecchi DSL sperimentali

Se sono stati creati DSLS sperimentali che non si desidera più, è possibile rimuoverli dal computer reimpostando l'istanza sperimentale di Visual Studio.

Questo rimuoverà dal computer tutte le DSL sperimentali e altre estensioni sperimentali di Visual Studio. Si tratta di estensioni eseguite in modalità di debug.

Questa procedura non rimuove i DSLS o altre estensioni di Visual Studio installate completamente eseguendo il file VSIX.

Per reimpostare l'istanza sperimentale di Visual Studio

  1. Nel menu Start di Windows digitare reimpostare Visual Studio e quindi eseguire il comando Reimposta istanza sperimentale di Microsoft Visual Studio corrispondente alla versione di Visual Studio.

  2. Ricompilare eventuali DSLS sperimentali o altre estensioni sperimentali di Visual Studio che si vogliono comunque usare.