490 likes | 1.01k Views
Tips & Tricks Tips and Tricks for CodeSmith 3.0. Rob Howard rhoward@telligent.com CodeSmith Tools, LLC. For More Information…. Learn more www.codesmithtools.com Download free 30 day trial Contact Us sales@codesmithtools.com +1 972 407 0688 CodeSmith & Telligent
E N D
Tips & TricksTips and Tricks for CodeSmith 3.0 Rob Howardrhoward@telligent.com CodeSmith Tools, LLC
For More Information… • Learn more • www.codesmithtools.com • Download free 30 day trial • Contact Us • sales@codesmithtools.com • +1 972 407 0688 • CodeSmith & Telligent • Partnered together with a common goal: • “Build world-class software tools”
Agenda • What is CodeSmith? • Using CodeSmith 3.0 • Working with Data & XML • Advanced Tips & Tricks • Licensing & Pricing
What 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 don’t 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
The 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
Your 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
New 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
Customers include… …and many others
CodeSmith 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
CodeSmith Templates • Similar to ASP.NET page • CodeSmith Templates will be familiar • Event and <% %> 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
Statement 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
Visual Studio Integration • Integrated with Visual Studio .NET • Automatically integrated during installation • “Visual Studio add-in” • Using CodeSmith within Visual Studio .NET • Tools -> Add-in Manager • Tools -> CodeSmith Explorer • Executing Templates in Visual Studio .NET • View templates in Template Explorer • Right-click to execute templates
CodeSmithAdd-in CodeSmithExplorer
Active & 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)
Active 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
Bound toCustom Tool GeneratedSource File GeneratedSource
Creating 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
Auto 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
Building 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
Building 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
Database 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.
Working 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
Debugging 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
Debugging Templates, cont • Compilation is similar to ASP.NET • Occasionally template is not enough • Need the ability to examine source • LinePragmas • Defined in <%@ CodeTemplate %> • Set to true or false • Default to true • Reports line number in template • False, reports line number in generated code
Template 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
Template 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
Automated 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
Command 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 /batch:<file> cs.exe /batch:BatchModeSample.xml
Batch Generation File Format • <defaultTemplate/> • Default template used to generate output • Can be overridden in <propertySet/> • <variables/> • Metadata used in property definitions • <defaultProperties/> • Define global properties • <propertySet/> • Serialized representation of template properties
Merge Strategies • Enable Active Generation • Can’t always generate exactly what you need • Custom logic along with Active Generation • Example • SampleProjects\ConsoleSamples • PreserveRegionsMergeSample.cst
Licensing • 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
Conclusion • CodeSmith 3.0 • Most powerful code generation tool available • Reduces time spent writing trivial code • Be more productive • Template driven means it’s still your code • Saves you time and money • Coming soon: CodeSmith 3.1 • Minor bug fix, etc. release • Includes updated product documentation
Learn more • www.codesmithtools.com • Download free 30 day trial Contact Us • sales@codesmithtools.com • +1 972 407 0688