Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Det här avsnittet beskriver de grundläggande begreppen för att definiera och använda ett domänspecifikt språk (DSL) som skapats med Modeling SDK för Visual Studio.
Anmärkning
SDK:et för transformering av textmallar och Visual Studio Modeling SDK installeras automatiskt när du installerar specifika funktioner i Visual Studio. Mer information finns i det här blogginlägget.
Om du inte har använt DSL:er tidigare rekommenderar vi att du går igenom DSL Tools Lab, som du hittar på den här webbplatsen: Visualisering och modellerings-SDK
Vad kan du göra med ett domänspecifikt språk?
Ett domänspecifikt språk är en notation, vanligtvis grafisk, som är utformad för att användas för ett visst ändamål. Språk som UML är däremot allmänna. I en DSL kan du definiera typerna av modellelement och deras relationer och hur de visas på skärmen.
När du har utformat en DSL kan du distribuera den som en del av ett VSIX-paket (Visual Studio Integration Extension). Användare arbetar med DSL i Visual Studio:
Notationen är bara en del av en DSL. Tillsammans med notationen innehåller VSIX-paketet verktyg som användarna kan använda för att hjälpa dem att redigera och generera material från sina modeller.
Ett av huvudprogrammen för DSL:er är att generera programkod, konfigurationsfiler och andra artefakter. Särskilt i stora projekt och produktlinjer, där flera varianter av en produkt kommer att skapas, kan det ge en stor ökning av tillförlitligheten och ett mycket snabbt svar på kravändringar om du genererar många av de olika variabelaspekterna från DSL:er.
Resten av den här översikten är en genomgång som introducerar de grundläggande åtgärderna för att skapa och använda ett domänspecifikt språk i Visual Studio.
Förutsättningar
Om du vill definiera en DSL måste du ha installerat följande komponenter:
| Komponent | Länk |
|---|---|
| Visual Studio | http://go.microsoft.com/fwlink/?LinkId=185579 |
| Visual Studio SDK | https://go.microsoft.com/fwlink/?linkid=2166172 |
| Modellerings-SDK för Visual Studio |
Anmärkning
Komponenten Transformering av textmall installeras automatiskt som en del av arbetsbelastningen för utveckling av Visual Studio-tillägget. Du kan också installera den från fliken Enskilda komponenter i Visual Studio Installer under kategorin SDK:er, bibliotek och ramverk . Installera SDK-komponenten modellering från fliken Enskilda komponenter .
Skapa en DSL-lösning
Om du vill skapa ett nytt domänspecifikt språk skapar du en ny Visual Studio-lösning med hjälp av projektmallen Domain-Specific Language.
Peka på Nytt på Arkiv-menyn och klicka sedan på Projekt.
Under Projekttyper expanderar du noden Andra projekttyper och klickar på Utökningsbarhet.
Klicka på Domain-Specific Language Designer.
I rutan Namn skriver du FamilyTree. Klicka på OK.
Guiden för domänspecifika språk öppnas och visar en lista över mallar för DSL-lösningar.
Klicka på varje mall för att se en beskrivning,
Mallarna är användbara utgångspunkter. Var och en av dem erbjuder ett komplett och fungerande domänspecifikt språk (DSL), som du kan redigera för att passa dina behov. Vanligtvis väljer du mallen närmast det du vill skapa.
För den här genomgången väljer du mallen Minimalt språk .
Ange ett filnamnstillägg för din DSL på lämplig guidesida. Det här är tillägget som filer som innehåller instanser av din DSL kommer att använda.
Välj ett tillägg som inte är associerat med något program på datorn eller på en dator där du vill installera DSL. Docx och htm skulle till exempel vara oacceptabla filnamnstillägg.
Guiden varnar dig om det tillägg som du har angett redan används som en DSL. Överväg att använda ett annat filnamnstillägg. Du kan också återställa Visual Studio SDK Experimental-instansen för att rensa bort gamla experimentella designers. På Start-menyn i Windows skriver du Återställ Visual Studio och kör sedan kommandot Återställ Microsoft Visual Studio Experimental Instance som matchar din version av Visual Studio.
Granska de andra sidorna och klicka sedan på Slutför.
En lösning genereras som innehåller två projekt. De heter Dsl och DslPackage. En diagramfil öppnas med namnet DslDefinition.dsl.
Anmärkning
Merparten av koden som du kan se i mapparna i de två projekten genereras från DslDefinition.dsl. Därför görs de flesta ändringar i din DSL i den här filen.
Användargränssnittet liknar nu följande bild.
Den här lösningen definierar ett domänspecifikt språk. Mer information finns i Översikt över användargränssnittet för Domain-Specific Language Tools.
De viktiga delarna i DSL-lösningen
Observera följande aspekter av den nya lösningen:
Dsl\DslDefinition.dsl Det här är den fil som du ser när du skapar en DSL-lösning. Nästan all kod i lösningen genereras från den här filen, och de flesta ändringar som du gör i en DSL-definition görs här. Mer information finns i Arbeta med definitionsdiagrammet Arbeta med DSL.
Dsl-projekt Det här projektet innehåller kod som definierar det domänspecifika språket.
DslPackage-projekt Det här projektet innehåller kod som gör att instanser av DSL kan öppnas och redigeras i Visual Studio.
Starta DSL
Du kan köra DSL-lösningen så snart du har skapat den. Senare kan du ändra DSL-definitionen gradvis och köra lösningen igen efter varje ändring.
Så här experimenterar du med DSL
Klicka på Transformera alla mallar i verktygsfältet i Solution Explorer . Detta återskapar det mesta av källkoden från DslDefinition.dsl.
Anmärkning
När du ändrar DslDefinition.dsl måste du klicka på Transformera alla mallar innan du återskapar lösningen. Du kan automatisera det här steget. Mer information finns i Automatisera transformering av alla mallar.
Tryck på F5 eller klicka på Starta felsökningpå felsökningsmenyn.
DSL:en byggs och installeras i den experimentella instansen av Visual Studio.
En experimentell instans av Visual Studio startar. Den experimentella instansen tar inställningarna från ett separat underträd i registret, där Visual Studio-tillägg registreras i felsökningssyfte. Normala instanser av Visual Studio har inte åtkomst till tillägg som är registrerade där.
I den experimentella instansen av Visual Studio öppnar du modellfilen med namnet Test från Solution Explorer.
-eller-
Högerklicka på felsökningsprojektet, peka på Lägg till och klicka sedan på Objekt. I dialogrutan Lägg till objekt väljer du filtypen för din DSL.
Modellfilen öppnas som ett tomt diagram.
Verktygslådan öppnas och visar verktyg som är lämpliga för diagramtypen.
Använd verktygen för att skapa former och kopplingar i diagrammet.
Om du vill skapa former drar du från verktyget Exempelform till diagrammet.
Om du vill ansluta två former klickar du på verktyget Exempelkoppling, klickar på den första formen och klickar sedan på den andra formen.
Klicka på etiketterna för formerna för att ändra dem.
Din experimentella Visual Studio liknar följande exempel:
Innehållet i en modell
Innehållet i en fil som är en instans av en DSL kallas för en modell. Modellen innehåller modellelement och länkar mellan elementen. DSL-definitionen anger vilka typer av modellelement och länkar som kan finnas i modellen. I en DSL som skapats från mallen Minimalt språk finns det till exempel en typ av modellelement och en typ av länk.
DSL-definitionen kan ange hur modellen ska visas i ett diagram. Du kan välja mellan en mängd olika former och kopplingar. Du kan ange att vissa former ska visas i andra former.
Du kan visa en modell som ett träd i Utforskarvyn medan du redigerar en modell. När du lägger till former i diagrammet visas även modellelementen i utforskaren. Utforskaren kan användas även om det inte finns något diagram.
Om du inte kan se Utforskaren i felsökningsinstansen av Visual Studio, pekar du på Visa-menyn, välj Övriga fönster, och klickar sedan på <Språk>utforskaren.
API:et för din DSL
Din DSL genererar ett API som gör att du kan läsa och uppdatera modeller som är instanser av DSL. Ett program för API:et är att generera textfiler från en modell. Mer information finns i Design-Time-kodgenerering med hjälp av T4-textmallar.
Öppna mallfilerna med tillägget ".tt" i felsökningslösningen. De här exemplen visar hur du kan generera text från modeller och gör att du kan testa API:et för din DSL. Ett av exemplen är skrivet i Visual Basic, det andra i Visual C#.
Under varje mallfil finns den fil som den genererar. Expandera mallfilen i Solution Explorer och öppna den genererade filen.
Mallfilen innehåller ett kort kodsegment som visar alla element i modellen.
Den genererade filen innehåller resultatet.
När du ändrar en modellfil visas motsvarande ändringar i genererade filer när du har återskapat filerna.
Återskapa textfiler när du har ändrat modellfilen
Spara modellfilen i den experimentella instansen av Visual Studio.
Kontrollera att filnamnsparametern i varje .tt-fil refererar till modellfilen som du använder för experiment. Spara .tt-filen.
Klicka på Transformera alla mallar i verktygsfältet i Solution Explorer.
-eller-
Högerklicka på de mallar som du vill återskapa och klicka sedan på Kör anpassat verktyg.
Du kan lägga till valfritt antal textmallsfiler i ett projekt. Varje mall genererar en resultatfil.
Anmärkning
När du ändrar DSL-definitionen fungerar inte exempeltextmallkoden, såvida du inte uppdaterar den.
Mer information finns i Generera kod från ett Domain-Specific språk och skriva kod för att anpassa ett Domain-Specific språk.
Anpassning av DSL
När du vill ändra DSL-definitionen stänger du den experimentella instansen och uppdaterar definitionen i den huvudsakliga Visual Studio-instansen.
Anmärkning
När du har ändrat DSL-definitionen kan du förlora information i de testmodeller som du har skapat med hjälp av tidigare versioner. Felsökningslösningen innehåller till exempel en fil med namnet Exempel, som innehåller vissa former och kopplingar. När du har börjat utveckla din DSL-definition visas de inte och de går förlorade när du sparar filen.
Du kan göra en mängd olika tillägg till din DSL. I följande exempel får du ett intryck av möjligheterna.
Spara DSL-definitionen efter varje ändring, klicka på Transformera alla mallar i Solution Explorer och tryck sedan på F5 för att experimentera med den ändrade DSL:n.
Byt namn på typer och verktyg
Byt namn på befintliga domänklasser och relationer. Om du till exempel börjar med en DSL-definition som skapats från mallen Minimalt språk kan du utföra följande namnbytesåtgärder för att göra DSL:t till familjeträd.
Byta namn på domänklasser, relationer och verktyg
I diagrammet DslDefinition byter du namn på ExampleModel till FamilyTreeModel, ExampleElement till Person, Mål för föräldrar och Källor till barn. Du kan klicka på varje etikett för att ändra den.
Byt namn på element- och anslutningsverktygen.
Öppna DSL Explorer-fönstret genom att klicka på fliken under Solution Explorer. Om du inte kan se den pekar du på Andra Windows på menyn Visa och klickar sedan på DSL Explorer. DSL Explorer visas bara när DSL-definitionsdiagrammet är det aktiva fönstret.
Öppna fönstret Egenskaper och placera det så att du kan se DSL Explorer och Egenskaper samtidigt.
I DSL Explorer expanderar du Redigerare, Verktygslådeflikar, <DSL> och sedan Verktyg.
Klicka på ExampleElement. Det här är verktygslådans objekt som används för att skapa element.
I fönstret Egenskaper ändrar du egenskapen Namn till Person.
Observera att egenskapen Caption också ändras.
På samma sätt ändrar du namnet på verktyget ExampleConnector till ParentLink. Ändra egenskapen Caption så att den inte är en kopia av egenskapen Namn. Ange till exempel Överordnad länk.
Återskapa DSL:en.
Spara DSL-definitionsfilen.
Klicka på Transformera alla mallar i verktygsfältet i Solution Explorer
Tryck på F5. Vänta tills den experimentella instansen av Visual Studio visas.
Öppna en testmodellfil i felsökningslösningen i den experimentella instansen av Visual Studio. Dra element till den från verktygslådan. Observera att verktygstexterna och typnamnen i DSL Explorer har ändrats.
Spara modellfilen.
Öppna en .tt-fil och ersätt förekomster av den gamla typen och egenskapsnamnen med de nya namnen.
Kontrollera att filnamnet som anges i .tt-filen anger din testmodell.
Spara .tt-filen. Öppna den genererade filen för att se resultatet av att köra koden i .tt-filen. Kontrollera att det är korrekt.
Lägga till domänegenskaper i klasser
Lägg till egenskaper i en domänklass, till exempel för att representera en persons födelseår och död.
Om du vill göra de nya egenskaperna synliga i diagrammet måste du lägga till dekoratörer i formen som visar modellelementet. Du måste också mappa egenskaperna till dekoratörerna.
Så här lägger du till egenskaper och visar dem
Lägg till egenskaperna.
Högerklicka på domänklassen Person i DSL-definitionsdiagrammet, peka på Lägg till och klicka sedan på Domänegenskap.
Skriv en lista med nya egenskapsnamn, till exempel Födelse och Död. Tryck Retur efter varje.
Lägg till dekoratörer som visar egenskaperna i formen.
Följ den grå linje som sträcker sig från domänklassen Person till andra sidan diagrammet. Det här är en diagramelementkarta. Den länkar domänklassen till en formklass.
Högerklicka på den här formklassen, peka på Lägg till och klicka sedan på Textdekoratör.
Lägg till två dekoratörer med namn som BirthDecorator och DeathDecorator.
Välj varje ny dekoratör och ange fältet Position i fönstret Egenskaper. Detta avgör var domänegenskapsvärdet ska visas i formen. Ange till exempel InnerBottomLeft och InnerBottomRight.
Mappa dekoratörerna till egenskaperna.
Öppna fönstret DSL-detaljer. Den finns vanligtvis på en flik bredvid utdatafönstret. Om du inte kan se den pekar du på Andra Windows på menyn Visa och klickar sedan på DSL-information.
I DSL-definitionsdiagrammet klickar du på raden som ansluter domänklassen Person till formklassen.
I DSL-information går du till fliken Dekoratörskartor och markerar kryssrutan för en dekoratör som inte är kartlagd. I Visa egenskap väljer du den domänegenskap som du vill att den ska mappas till. Mappa till exempel BirthDecorator till Birth.
Spara DSL, klicka på Transformera alla mallar och tryck på F5.
I ett exempelmodelldiagram kontrollerar du att du nu kan klicka på de positioner du har valt och skriva in värden i dem. När du väljer en personform visas dessutom de nya egenskaperna Födelse och Död i fönstret Egenskaper.
I en .tt-fil kan du lägga till kod som hämtar egenskaperna för varje person.
Definiera nya klasser
Du kan lägga till domänklasser och relationer i en modell. Du kan till exempel skapa en ny klass för att representera städer och en ny relation som representerar att en person bodde i en stad.
Om du vill göra de olika typerna distinkta i ett modelldiagram kan du mappa domänklasserna till olika typer av form eller till former med olika geometri och färger.
Så här lägger du till och visar en ny domänklass
Lägg till en domänklass och gör den till underordnad modellroten.
I DSL-definitionsdiagrammet klickar du på verktyget Bädda in relationen, klickar du på rotklassen FamilyTreeModel och klickar sedan i en tom del av diagrammet.
En ny domänklass visas som är ansluten till FamilyTreeModel med en inbäddningsrelation.
Ange dess namn, till exempel Stad.
Anmärkning
Alla domänklasser utom modellens rot måste vara målet för minst en inbäddningsrelation, eller så måste den ärva från en klass som är målet för en inbäddning. Därför är det ofta praktiskt att skapa en domänklass med hjälp av verktyget för att bädda in relationer.
Lägg till en domänegenskap i den nya klassen, till exempel Namn.
Lägg till en referensrelation mellan Person och Stad.
Klicka på verktyget Referensrelation , klicka på Person och sedan på Stad.
Anmärkning
Referensrelationer representerar korsreferenser från en del av modellträdet till en annan.
Lägg till en form som representerar orter i modelldiagrammen.
Dra en geometriform från verktygslådan till diagrammet och byt namn på den, till exempel TownShape.
I fönstret Egenskaper anger du fälten Utseende för den nya formen, till exempel Fyllningsfärg och Geometri.
Lägg till en dekoratör för att visa namnet på staden och byt namn på den till NameDecorator. Ange egenskapen Position.
Mappa domänklassen Town till TownShape.
Klicka på verktyget Diagramelementkarta , klicka sedan på domänklassen Town och sedan på formklassen TownShape.
På fliken Dekoratörskartor i fönstret DSL-information med kartanslutningen markerad markerar du NameDecorator och anger Visningsegenskap till Namn.
Skapa en anslutning för att visa relationen mellan person och städer.
Dra en koppling från verktygslådan till diagrammet. Byt namn på den och ange dess utseendeegenskaper.
Använd verktyget Diagramelementkarta för att länka den nya anslutningen till relationen mellan Person och Stad.
Skapa ett elementverktyg för att skapa en ny stad.
I DSL Explorer expanderar du Redigeraren och sedan Verktygslådeflikar.
Högerklicka på <din DSL> och klicka sedan på Lägg till nytt elementverktyg.
Ange egenskapen Namn för det nya verktyget och ange dess klassegenskap till Stad.
Ange egenskapen Verktygslåda ikon . Klicka på [...] och välj en ikonfil i fältet Filnamn .
Skapa ett anslutningsverktyg för att skapa en länk mellan städer och människor.
Högerklicka på <din DSL> och klicka sedan på Lägg till nytt anslutningsverktyg.
Ange egenskapen Namn för det nya verktyget.
I egenskapen ConnectionBuilder väljer du byggverktyget som innehåller namnet på Person-Town-relationen.
Ange verktygslådeikonen.
Spara DSL-definitionen, klicka på Transformera alla mallar och tryck sedan på F5.
Öppna en testmodellfil i den experimentella instansen av Visual Studio. Använd de nya verktygen för att skapa städer och länkar mellan städer och personer. Observera att du bara kan skapa länkar mellan rätt typer av element.
Skapa kod som visar den stad där varje person bor. Textmallar är en av de platser där du kan köra sådan kod. Du kan till exempel ändra den befintliga Sample.tt filen i felsökningslösningen så att den innehåller följande kod:
<#@ 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 #> <# } } #>När du sparar filen *.tt skapas en underordnad fil som innehåller listan över personer och deras bostäder. Mer information finns i Generera kod från ett domänspecifikt språk.
Validering och kommandon
Du kan utveckla den här DSL:en ytterligare genom att lägga till verifieringsbegränsningar. Dessa begränsningar är metoder som du kan definiera, som ser till att modellen är i rätt tillstånd. Du kan till exempel definiera en begränsning för att se till att ett barns födelsedatum är senare än dess föräldrars. Valideringsfunktionen visar en varning om DSL-användaren försöker spara en modell som bryter någon av begränsningarna. Mer information finns i Validering på ett Domain-Specific språk.
Du kan också definiera menykommandon som användaren kan anropa. Kommandon kan ändra modellen. De kan också interagera med andra modeller i Visual Studio och med externa resurser. Mer information finns i Så här: Ändra ett standardmenykommando.
Distribuera DSL
Om du vill tillåta andra användare att använda det domänspecifika språket distribuerar du en VSIX-fil (Visual Studio Extension). Detta skapas när du skapar DSL-lösningen.
Leta upp .vsix-filen i bin-mappen för din lösning. Kopiera den till den dator där du vill installera den. Dubbelklicka på VSIX-filen på datorn. DSL kan användas i alla instanser av Visual Studio på den datorn.
Du kan använda samma procedur för att installera DSL på din egen dator så att du inte behöver använda den experimentella instansen av Visual Studio.
För mer information, se "Distribuering av Domain-Specific Language Solutions".
Ta bort gamla experimentella DSL:er
Om du har skapat experimentella DSL:er som du inte längre vill använda kan du ta bort dem från datorn genom att återställa Visual Studio Experimental-instansen.
Detta tar bort alla experimentella DSL:er och andra experimentella Visual Studio-tillägg från datorn. Det här är tillägg som har körts i felsökningsläge.
Den här proceduren tar inte bort DSL:er eller andra Visual Studio-tillägg som har installerats fullständigt genom att köra VSIX-filen.
Så här återställer du Visual Studio Experimental-instansen
På Start-menyn i Windows skriver du Återställ Visual Studio och kör sedan kommandot Återställ Microsoft Visual Studio Experimental Instance som matchar din version av Visual Studio.
Återskapa eventuella experimentella DSL:er eller andra experimentella Visual Studio-tillägg som du fortfarande vill använda.