This is a guide for Building a DSL Designer using the DSL Tools for VS2005.
These components must be intalled:
- Visual Studio 2005
- Visual Studio 2005 SDK
- DSL Tools for Visual Studio 2005
1. Create a new project in VS2005
The project template must be: Other Project Types -> Extensibility -> Domain Specific Language Designer.
Choose a template for the designer.
Note that VS has created a solution with 2 projects: Designer and DomainModel.
A DSL Designer consists of 3 components:
1. Domain elements (Domain Model)
2. Notational elements
3. Mapping between Domain and Notational elements
2. The Domain Model
The Domain Model is in the DomainModel.dsldm in the DomainModel Project. You can edit it by gragging and dropping the Domain Model Designer Tools of the Toolbox.
The Model contains classes and relationships. Classes may contain value properties.
3. The Notation
The Notation is represented in an xml file. The default description is in the file Designer.dsldd in the Designer Project.
The notation can include shapes which appear in the toolbox and can be dragged onto the design surface, connector for the shapes, etc.
4. Domain-Notation Mapping
This is also defined in the dsldd file. In general the mapping is between shapes and connector lines to classes and relationships respectively. So when a user creates shapes and connectors in the designer he also creates the classes and relationships in the domain.
5. Generate code and build
Click on the "Transform All Templates" button in the Solution Explorer Toolbar.
Build the solution.
Press Ctrl+F5 to run the designer.
6. Consuming the DSL
Templates consist of some directives followed by a mixture of literal blocks and control blocks. Literal blocks are just plain text in the template that you want to pass straight through to the output. Control blocks are things with some kind of <# #> marker around them.
The content of these blocks in your template contributes to a class which the templating system generates. This class derives from the abstract class Microsoft.VisualStudio.TextTemplating.TextTransformation and overrides the abstract method TransformText which, when executed, writes out the desired output of the transformation of the template. If you do nothing else in your template, this method will write out all of the text in literal blocks by simply writing out the raw text using a simple WriteLine()-style statement. The base class provides this WriteLine method (in various flavors) as well as Error and Warning methods that you can use in your custom template code.
Add a Setup package to build a deployable designer.