200 likes | 207 Views
Explore the past and present of Visual Studio, including its extensibility options such as DSL Tools and T4 code generation. Learn about automating tasks, onboarding new developers, and maintaining consistency. Discover various extensibility options like snippets, project templates, custom commands, and more. See a demo of Visual Studio extensions for DSL Tools and T4 code generation, including domain-specific languages, visual designers, custom XML files, and object models. Learn about T4 text templating and its use in generating text files and strings. Get insights into the Double Derived Pattern and find answers to your questions.
E N D
Visual Studio Extensibility, DSL Tools and T4 Code Generation Peter Goodman
Agenda • Visual Studio past and present • Extensibility Options • Extensibility Samples • DSL Tools • T4 Code Generation
Visual Studio Past and Present • Native Application • 32-bit • Large and old code base • Visual Studio – 1995 • Visual Studio .Net – 2002 • Since 2005 supports VS Hives
Why Extend? • Automate – it’s your job • Onboarding • Consistency
Extensibility Options • Snippets • Project Templates • Item Templates • Custom Commands • Toolbars • Menus • Tool Windows • Custom Tools • Custom Designers • Editor Extensions • Custom Languages
Extensibility Options • Macros • Add-ins • VS Packages • VS Shell
Demo Visual Studio Extensions
DSL Tools • Domain Specific Languages • Visual Designer • Custom XML File • Object Model and API • T4 Text Templating
Demo DSL Tools
T4 Text Templating • Generates Text Files / Strings • ASP style syntax <# …. #> • Built into Visual Studio from VS 2010 • Used by Entity Framework, MVC scaffolding, WCF RIA and other MS technologies • Now supports pre-processed templates
Demo T4 Text Templating
Double Derived Pattern publicclassMyGeneratedClass : IMyGeneratedClasses { publicstringDoFoo() { return""; } }
Double Derived Pattern publicclassMyGeneratedClass : MyGeneratedClassBase {} publicclassMyGeneratedClassBase : IMyGeneratedClasses { public virtualstringDoFoo() { return""; } }
Double Derived Pattern publicpartialclassMyGeneratedClass : MyGeneratedClassBase {} publicclassMyGeneratedClassBase : IMyGeneratedClasses { public virtualstringDoFoo() { return""; } }
Thanks • pete@petegoo.com • http://blog.petegoo.com