Title: Tips
1Tips TricksTips and Tricks for CodeSmith 3.0
- Rob Howardrhoward_at_telligent.com
- CodeSmith Tools, LLC
2For More Information
- Learn more
- www.codesmithtools.com
- Download free 30 day trial
- Contact Us
- sales_at_codesmithtools.com
- 1 972 407 0688
- CodeSmith Telligent
- Partnered together with a common goal
- Build world-class software tools
3Agenda
- What is CodeSmith?
- Using CodeSmith 3.0
- Working with Data XML
- Advanced Tips Tricks
- Licensing Pricing
4What is Code Generation
- Software creation
- Can be fun and challenging
- but also repetitive and monotonous
- Repetition monotony leads to bugs
- Code generation is not a new concept
- With most tools you dont control the output
- Often viewed as a Black Box solution
- Ex, data layer created (but it is not your code)
- CodeSmith 3.0
- Not a Black Box solution
- Template driven code generation (it is your code)
- Use existing templates or write new ones
5The value of CodeSmith
- The cost of creating software
- Design, Development, Test, Release
- Easily runs between 50 - 300/hour
- CodeSmith
- CodeSmith 3.0 Professional 299
- Equivalent to 3-6 hours of development
- Real value you can measure
- Dramatically reduces project time cost
- Quickly pays for itself
6Your code. Your way. Faster!
- CodeSmith
- Version 2.6, released January 2004
- Version 3.0, released May 2005
- Version 3.1, released August 2005
- CodeSmith 3.0 includes
- CodeSmith Professional Studio (IDE)
- Visual Studio .NET integration
- Command line code generation engine
- Base set of common templates
7New in Version 3.0
- Active Generation Templates
- Statement Completion, AKA Intellisense
- Deep XML support
- New merge strategies preserve region
- Easier template debugging
- Template caching for faster execution
- Event driven template architecture
- Ability to auto-execute SQL scripts
- and much, much more
8Customers include
and many others
9Using CodeSmith 3.0
10CodeSmith Professional Studio
- Integrated Development Environment
- Editing and Executing templates
- Template Explorer
- Professional Edition only
- Features
- Database schema browser
- Template syntax highlighting
- Template, Output, and Compilation views
- Property editing
11CodeSmith Templates
- Similar to ASP.NET page
- CodeSmith Templates will be familiar
- Event and lt gt code
- Template contains
- Directives
- Template logic (VB C code)
- Output Text (your code, comments, etc.)
- Template events, methods, and properties
- A CodeSmith template is
- Document with .cst extension
- Edit with CodeSmith Studio or text editor
12Statement Completion
- CodeSmith 2.6
- Lacked Intellisense support
- Required intimate knowledge of APIs
- CodeSmith 3.0
- Full statement completion support
- VB.NET and C
- Intellisense
- Makes you more productive
- Reduces development time
13My First Template
14Visual Studio Integration
- Integrated with Visual Studio .NET
- Automatically integrated during installation
- Visual Studio add-in
- Using CodeSmith within Visual Studio .NET
- Tools -gt Add-in Manager
- Tools -gt CodeSmith Explorer
- Executing Templates in Visual Studio .NET
- View templates in Template Explorer
- Right-click to execute templates
15CodeSmithAdd-in
CodeSmithExplorer
16Visual Studio Integration
17Active Passive Generation
- Passive Generation
- Use CodeSmith as key stroke saver
- Render template and then use results
- CodeSmith may or may not be used again
- Active Generation (Recommended)
- Use template as source code
- Whenever build project run template
- Ex, write single template to generate 100s of
classes (or other files)
18Active Generation Templates
- Enabled through Visual Studio Custom Tool
- Active Generation Templates
- Executed each time the input file changes
- Perfect for Active Generation
- Example SampleProjects\CSharpCodeGeneratorSample
- Execute Active Generation Templates
- Right-click hashtable.xml in VS .NET
- Select Run Custom Tool
- Renders multiple property sets for template
- Any time xml file is touched templates are
regenerated - Click on show all files to see hidden code files
19Bound toCustom Tool
GeneratedSource File
GeneratedSource
20Active Generation Template
21Working with Data XML
22Creating Data Access Layer
- Stored Procedures (SPROC)
- Preferred data access technique
- Provides abstraction API for data access
- Create/Read/Update/Delete (CRUD)
- Tedious to write (Equals more bugs)
- Imagine manually creating for every table
- StoredProcedures.cst Template
- Generates CRUD layer for any table
- Created in seconds! for all tables
23Creating Data Access Layer
24Auto SQL Script Execution
- Automatically update database
- Generated SQL is automatically executed
- Maintain entities in CodeSmith
- Updating template to update schema
- Ex, Telligent used CodeSmith for VSIP
- 100 template driven database layer
25Script Execution
26Building Data Access APIs
- Data Access Layer
- APIs for working with data APIs, e.g. sprocs
- Typically monotonous repetitive code
- Time consuming to code by hand
- Encourages Stored Procedures
- Template generates typed wrapper
- VB.NET and C
- Enforces best practices
- Open connection late, close early
- Try/Catch blocks
27Building Data Access APIs
28Building Data Access APIs
- AllCommandWrappers.cst Template
- Point to a database
- CodeSmith outputs all occurrences
- OutputDirectory
- Default location for generated files
- Configurable, e.g. my project directory
- Generate entire data layer
- Can exclude stored procedures
29Building Data Access APIs
30Database Documentation
- DbDocumenter Templates (master.cst)
- Set basic information and run batch file
- Ex, database connection and title
- Great demo of CodeSmith capabilities
- Simple repetitive problem
- Would take weeks to create manually
- Demonstrates CodeSmith best practices
- Additional ideas
- Modify templates to generate ASP.NET
- Generate .CHM help files
- Add execute capabilities, etc.
31Database Documentation
32Working with XML
- New XmlProperty
- Work with XML in a strongly typed manner
- Using XML as metadata very easy
- With an XSD
- Strongly typed accessory to XML file
- Read-only access
- Without an XSD file
- XmlDocument type returned
33XmlProperty Directive
34Advanced Tips Tricks
35Debugging Templates
- Set Debugger.Break() in code
- Break-point in Template execution
- .NET JIT Debugger window opens
- From .NET JIT Debugger window
- Select Debug Tool
- EX, Visual Studio .NET 2003
- Step through template source
- Reports error in template directly
- Most tools allow debugging of the result
36Debugging Templates, cont
- Compilation is similar to ASP.NET
- Occasionally template is not enough
- Need the ability to examine source
- LinePragmas
- Defined in lt_at_ CodeTemplate gt
- Set to true or false
- Default to true
- Reports line number in template
- False, reports line number in generated code
37Debugging Templates
38Template Events Overrides
- Initialization events
- Called once when template is instantiated
- OnInit
- Called once when template is instantiated
- All other events are raised on each use
- ParseDefaultValue()
- Allows for handling of type conversions
- Called for every default value of a property
- GetFileName()
- Override the default output file name
39Template Events Overrides
- Render events
- Similar in concept to ASP.NET events
- Called each time template instance is rendered
- OnPreRender
- Called before template rendering begins
- Set up default state
- Render
- If overridden takes over rendering process
- Example, if you want a master template
- OnPostRender
- Called after template is executed
- Contains string result of rendered template
40Template Events Overrides
41Automated Build Process
- Easily fit with your build environment
- Constantly validate ability to build code
- Example NAnt, MSBuild
- CodeSmith Command line tool
- Build project from command line
- CodeSmith used for Active Generation
- Easily integrated into environment
42Command Line Tool
- Console Application (cs.exe)
- XML file identifying templates to run
- Mirror Visual Studio Custom Tool behavior
- Execute single template, or
- Execute batches of templates
- Set properties via the Command Line
- Example usage
- SampleProjects\ConsoleSamples
- Use /batchltfilegt
cs.exe /batchBatchModeSample.xml
43Batch Generation File Format
- ltdefaultTemplate/gt
- Default template used to generate output
- Can be overridden in ltpropertySet/gt
- ltvariables/gt
- Metadata used in property definitions
- ltdefaultProperties/gt
- Define global properties
- ltpropertySet/gt
- Serialized representation of template properties
44Batch Generation
45Merge Strategies
- Enable Active Generation
- Cant always generate exactly what you need
- Custom logic along with Active Generation
- Example
- SampleProjects\ConsoleSamples
- PreserveRegionsMergeSample.cst
46Merge Strategies
47Licensing
- CodeSmith 2.6
- Standard Edition was free
- Professional Edition 79
- CodeSmith 3.0
- Upgrade from 2.6 to 3.0 Professional 49
- Standard Edition 49
- Professional Edition 299
- Support Options
- Community Support codesmithtools.com
- Premier / Incident support 99
48Conclusion
- CodeSmith 3.0
- Most powerful code generation tool available
- Reduces time spent writing trivial code
- Be more productive
- Template driven means its still your code
- Saves you time and money
- Coming soon CodeSmith 3.1
- Minor bug fix, etc. release
- Includes updated product documentation
49- Learn more
- www.codesmithtools.com
- Download free 30 day trial
- Contact Us
- sales_at_codesmithtools.com
- 1 972 407 0688