SlideShare ist ein Scribd-Unternehmen logo
.NET
User
Group
Bern
René Leupold
www.databinding.net
connect@databinding.net
Follow dnugbe on twitter
http://www.dnug-bern.ch/rss.aspx
DNUG Bern Sponsoren
Über René Leupold
• Siehe Xing ;-)
• Speaker VSone 16.-17. Feb. 2011,
München (www.vsone.de)
– Inheritance mit EF (DB First, Model First,
Code First)
Hinweis: Verwendung für eigene Präsentationen nur mit Einverständnis des Autors
Was ist T4
• Code-Generator mit ASP ähnlicher
Syntax
• Templatesprache in VB.NET und C#
• Generierung von
technologieunabhängigem Code
• Erstmalig built-in mit VS 2008
• Verbesserte Integration mit VS 2010
Ein Tool das macht was ich
will (fast immer)
Motivation
Abgrenzung
• Eine das kann VS Ultimate Show
• Eine Einführung in die Erstellung
eigener DSL’s
• Eine T4 Missionierung
Was ist dieser Vortrag nicht
Agenda
• Werkzeuge für Intellisense
• Syntax
• Prozessablauf und Architektur
• Aufbau Text Template
• Anwendungsszenarien
• Aufbau Preprocessed Template
• Beispielprojekt
• Vorteile
• Herausforderungen
• Ressourcen
Werkzeuge für Intellisense
Tangible T4 – Editor
• Visual Studio 2005
• Visual Studio 2008
• Visual Studio 2010
• Wir verlosen heute eine
Lizenz, das nächste Mal
auch und das
übernächste Mal immer
noch, bis Ende Jahr ;-)
Visual T4 – Editor (Clarius)
• Visual Studio 2005
• Visual Studio 2008
• Visual Studio 2010
– mittlerweile Beta
Syntax
Processing
Directive
Text Block
Statement Block
Expression Block
Class Feature
Block
Built-in Directives
output
template
include
assembly
import
parameter
Include file=
• Relative Pfadangaben dirtemplate.ttinclude
• Umgebungsvariablen %pfad%template.ttinclude
• VS Makro $(SolutionDir)t4incT4.ttinclude
Neu in VS 2010
• Include Folder in Registry setzen
Datei ohne Pfad
• Drag and Drop - Support mit tangible T4-Editor
• Verhält sich wie SSI (Vorsicht)
Besonderheit
[HKEY_LOCAL_MACHINESoftwareWow6432NodeMicrosoftVisualStudio10.0TextTemplatingIncludeFolders.tt]
assembly name=
• Umgebungsvariablen %pfad%template.tt
• VS Makro $(ProjectDir)binT4.dll
Neu in VS 2010
• GAC
• Public Assembly Folder VS
Datei ohne Pfad
• Sperrung der Assembly bis Solution geschlossen wird
Besonderheit
Alternative: VolatileAssembly
assembly name=
• Assembly wird nicht mehr gesperrt
Neu ab VS 2010 SP1
• Temporäre Kopie der Assembly
• So wie VolatileAssembly
Angelehnt an Verhalten von ASP.NET
• ShadowCopy = false
Besonderheit (kann deaktiviert werden)
HKEY_LOCAL_MACHINESOFTWARE[Wow6432Node]MicrosoftVisualStudio10.0TextTemplating
• Primärer Einsatz für DSL
• Ermöglicht Zugriff auf das Modell
• Eigene DSL mit VS Visualization &
Modeling SDK
Class Diagram (als Beispiel)
Generated Directive
• Klasse muss von DirectiveProcessor
ableiten
• CodeDom Provider verwenden, wenn
Support für C# und VB.NET
• Klasse in Registry registrieren
• Bsp.: VolatileAssembly
• Alternative: Verwenden einer eigenen
Assembly
DirectiveProcessor
Custom Directive
Prozessablauf
Output
Template
Generate
Compiled Template
Run
Architektur
Sicherheit
AUFBAU TEXT TEMPLATE
Demo
ANWENDUNGSSZENARIEN
o Debugging
o Generierung von Datenbank(Bottom up)
o Mehrere Files mit einem Text Template erstellen
o Parametrisierte Text Templates
o Code in andere Solution erstellen (T4 Toolbox und TemplFileM.)
o Visual Studio 2010 Automation
o Refactoring handcodierter Klassen mit T4, VS FCM und StoryQ
o Beispiele Technologieunabhängigkeit mit Excel
o EF Codegenerierungsvorlage erstellen
o Model First mit EF CTP 5 und «UML/DSL»
Preprocessed Template
• Keine Abhängigkeit zu VS
• Erweiterbar
• Verwendbar in eigenen
Anwendungen
Neu mit VS 2010
AUFBAU PREPROCESSED
TEMPLATE
Demo
ANWENDUNGSSZENARIEN
o Erweiterbares Preprocessed Template
o StoryQ Preprocessed Template
BEISPIELPROJEKT
o Angepasster EDM-Designer
o Angepasste EF Codegenerierungsvorlage
o Generierung des langweiligen Codes
o Codezentrierte Entwicklung der funktionalen Anforderungen
o Generierung des StoryQ-Testgerüsts aus TFS Workitem
o Generierung der WCF-Services basierend auf den
geschriebenen Code
o T4 Templates ausführen mit F6 ;-)
Vorteile
Vorteile
Innerhalb der Solution (Freiräume)
Code-Qualität
Steigerung der Produktivität
Technologieunabhängiger Code
Keine Methodenbindung
Mehr Zeit für die Anforderungen
Herausforderungen
Herausforderungen
Menschlicher Faktor
Arbeiten ohne den gewohnten Komfort von VS
Kein Framework mit Basisskripts
Strukturierte Anforderungsdokumente
Technologische Weiterentwicklung der Templates
Designüberlegungen
T4 Erweitert
• EntityFrameworkTemplateFileManager
(EF.Utility.CS.ttinclude)
• Damien Guards Output manager
• TemplateFileManager by myself
• T4Toolbox (unterstützt Ausgabe in unterschiedliche
Projektmappen)
Mehrere Dateien mit T4
• MsBuild-Integration (VS Visualization & Modeling SDK)
• Chirpy (VS AddIn)
T4 mit Build ausführen
Ressourcen
• Gareth Jones (http://blogs.msdn.com/b/garethj/)
• MSDN (http://www.microsoft.com/germany/msdn/webcasts/library.aspx?id=1032456634)
• MvcContrib (http://mvccontrib.codeplex.com/)
• Oleg Sych (http://www.olegsych.com/)
• T4 Mind Map (http://www.mindmeister.com/de/52082132/t4-textvorlagen)
• T4 Toolbox (http://t4toolbox.codeplex.com/)
• tangible, clarius …
Ressourcen
• Kay’s ASP.NET MVC 2 HOL T4 Section
http://blogs.msdn.com/b/swiss_dpe_team/archive/2010/12/01/asp-net-mvc-hands-on-lab.aspx
• Meine Erfahrungen mit T4
http://www.databinding.net/blog/category/t4.html
• T4 Beispiele http://www.databinding.net/blog/post/2010/10/28/t4-beispiele-der-
advanced-developer-conference-adc-2010-im-mindmap.html
Ressourcen Tangible Code Gallery
• FileTemplateManagerr
Ressourcen Tangible Code Gallery
• VsAutomationHelperr
Fragen und Diskussion beim
Apéro?
bzw. .NET User Group Bern
Community Feed
http://www.dnug-bern.ch/rss.aspx

Weitere ähnliche Inhalte

Ähnlich wie Text Template Transformation Toolkit (T4)

Codewiederverwendung in Xamarin-Apps maximieren
Codewiederverwendung in Xamarin-Apps maximierenCodewiederverwendung in Xamarin-Apps maximieren
Codewiederverwendung in Xamarin-Apps maximieren
André Krämer
 
Top 10 Internet Trends 2001
Top 10 Internet Trends 2001Top 10 Internet Trends 2001
Top 10 Internet Trends 2001
Jürg Stuker
 
WordPress sprachfähig machen - Lokalisierung Kür oder Krampf? - WordCamp Deut...
WordPress sprachfähig machen - Lokalisierung Kür oder Krampf? - WordCamp Deut...WordPress sprachfähig machen - Lokalisierung Kür oder Krampf? - WordCamp Deut...
WordPress sprachfähig machen - Lokalisierung Kür oder Krampf? - WordCamp Deut...
David Decker
 
PHPblue LOS!NRW
PHPblue LOS!NRWPHPblue LOS!NRW
PHPblue LOS!NRW
Andreas Schulte
 
Taugt AngularJS wirklich was? Erfahrungsbericht und Ausblick
Taugt AngularJS wirklich was? Erfahrungsbericht und AusblickTaugt AngularJS wirklich was? Erfahrungsbericht und Ausblick
Taugt AngularJS wirklich was? Erfahrungsbericht und Ausblick
Philipp Burgmer
 
Node.js - Von der Entwicklugn bis zum produktiven Einsatz
Node.js - Von der Entwicklugn bis zum produktiven EinsatzNode.js - Von der Entwicklugn bis zum produktiven Einsatz
Node.js - Von der Entwicklugn bis zum produktiven Einsatz
Kai Donato
 
C Sharp Einfuehrung Teil 1
C Sharp Einfuehrung Teil 1C Sharp Einfuehrung Teil 1
C Sharp Einfuehrung Teil 1
DraphonyGames
 
JavaScript für Java-Entwickler W-JAX 2013
JavaScript für Java-Entwickler W-JAX 2013JavaScript für Java-Entwickler W-JAX 2013
JavaScript für Java-Entwickler W-JAX 2013Oliver Zeigermann
 
Desktop Containers 12: Next Generation of ZENworks Application Virtualization
Desktop Containers 12: Next Generation of ZENworks Application VirtualizationDesktop Containers 12: Next Generation of ZENworks Application Virtualization
Desktop Containers 12: Next Generation of ZENworks Application Virtualization
GWAVA
 
Using openArchitectureWare 4.0 in domain "registration"
Using openArchitectureWare 4.0 in domain "registration"Using openArchitectureWare 4.0 in domain "registration"
Using openArchitectureWare 4.0 in domain "registration"
joergreichert
 
Webservice API - Webportale mit Force.com verbinden
Webservice API - Webportale mit Force.com verbindenWebservice API - Webportale mit Force.com verbinden
Webservice API - Webportale mit Force.com verbinden
Aptly GmbH
 
Robuste Design Systems mit Storybook und Angular: vom Konzept zur lebendigen ...
Robuste Design Systems mit Storybook und Angular: vom Konzept zur lebendigen ...Robuste Design Systems mit Storybook und Angular: vom Konzept zur lebendigen ...
Robuste Design Systems mit Storybook und Angular: vom Konzept zur lebendigen ...
Andreas Wissel
 
.NET und jetzt!
.NET und jetzt!.NET und jetzt!
.NET und jetzt!
Peter Hecker
 
eEvolution 8.1 - Tipps & Tricks - Teil 1
eEvolution 8.1 - Tipps & Tricks - Teil 1eEvolution 8.1 - Tipps & Tricks - Teil 1
eEvolution 8.1 - Tipps & Tricks - Teil 1
eEvolution GmbH & Co. KG
 
PHP auf IBM Plattformen
PHP auf IBM PlattformenPHP auf IBM Plattformen
PHP auf IBM Plattformen
Andreas Schulte
 
Roslyn DDC Kompakt 2014
Roslyn DDC Kompakt 2014Roslyn DDC Kompakt 2014
Roslyn DDC Kompakt 2014
Christian Giesswein
 
PHP5 und Oracle
PHP5 und OraclePHP5 und Oracle
PHP5 und Oracle
Mayflower GmbH
 

Ähnlich wie Text Template Transformation Toolkit (T4) (20)

Codewiederverwendung in Xamarin-Apps maximieren
Codewiederverwendung in Xamarin-Apps maximierenCodewiederverwendung in Xamarin-Apps maximieren
Codewiederverwendung in Xamarin-Apps maximieren
 
java apis
java apisjava apis
java apis
 
Top 10 Internet Trends 2001
Top 10 Internet Trends 2001Top 10 Internet Trends 2001
Top 10 Internet Trends 2001
 
WordPress sprachfähig machen - Lokalisierung Kür oder Krampf? - WordCamp Deut...
WordPress sprachfähig machen - Lokalisierung Kür oder Krampf? - WordCamp Deut...WordPress sprachfähig machen - Lokalisierung Kür oder Krampf? - WordCamp Deut...
WordPress sprachfähig machen - Lokalisierung Kür oder Krampf? - WordCamp Deut...
 
PHPblue LOS!NRW
PHPblue LOS!NRWPHPblue LOS!NRW
PHPblue LOS!NRW
 
Taugt AngularJS wirklich was? Erfahrungsbericht und Ausblick
Taugt AngularJS wirklich was? Erfahrungsbericht und AusblickTaugt AngularJS wirklich was? Erfahrungsbericht und Ausblick
Taugt AngularJS wirklich was? Erfahrungsbericht und Ausblick
 
Node.js - Von der Entwicklugn bis zum produktiven Einsatz
Node.js - Von der Entwicklugn bis zum produktiven EinsatzNode.js - Von der Entwicklugn bis zum produktiven Einsatz
Node.js - Von der Entwicklugn bis zum produktiven Einsatz
 
C Sharp Einfuehrung Teil 1
C Sharp Einfuehrung Teil 1C Sharp Einfuehrung Teil 1
C Sharp Einfuehrung Teil 1
 
JavaScript für Java-Entwickler W-JAX 2013
JavaScript für Java-Entwickler W-JAX 2013JavaScript für Java-Entwickler W-JAX 2013
JavaScript für Java-Entwickler W-JAX 2013
 
Desktop Containers 12: Next Generation of ZENworks Application Virtualization
Desktop Containers 12: Next Generation of ZENworks Application VirtualizationDesktop Containers 12: Next Generation of ZENworks Application Virtualization
Desktop Containers 12: Next Generation of ZENworks Application Virtualization
 
Using openArchitectureWare 4.0 in domain "registration"
Using openArchitectureWare 4.0 in domain "registration"Using openArchitectureWare 4.0 in domain "registration"
Using openArchitectureWare 4.0 in domain "registration"
 
Webservice API - Webportale mit Force.com verbinden
Webservice API - Webportale mit Force.com verbindenWebservice API - Webportale mit Force.com verbinden
Webservice API - Webportale mit Force.com verbinden
 
Robuste Design Systems mit Storybook und Angular: vom Konzept zur lebendigen ...
Robuste Design Systems mit Storybook und Angular: vom Konzept zur lebendigen ...Robuste Design Systems mit Storybook und Angular: vom Konzept zur lebendigen ...
Robuste Design Systems mit Storybook und Angular: vom Konzept zur lebendigen ...
 
2 Interop
2 Interop2 Interop
2 Interop
 
Kickoff
KickoffKickoff
Kickoff
 
.NET und jetzt!
.NET und jetzt!.NET und jetzt!
.NET und jetzt!
 
eEvolution 8.1 - Tipps & Tricks - Teil 1
eEvolution 8.1 - Tipps & Tricks - Teil 1eEvolution 8.1 - Tipps & Tricks - Teil 1
eEvolution 8.1 - Tipps & Tricks - Teil 1
 
PHP auf IBM Plattformen
PHP auf IBM PlattformenPHP auf IBM Plattformen
PHP auf IBM Plattformen
 
Roslyn DDC Kompakt 2014
Roslyn DDC Kompakt 2014Roslyn DDC Kompakt 2014
Roslyn DDC Kompakt 2014
 
PHP5 und Oracle
PHP5 und OraclePHP5 und Oracle
PHP5 und Oracle
 

Mehr von NETUserGroupBern

Large Language Models, Data & APIs - Integrating Generative AI Power into you...
Large Language Models, Data & APIs - Integrating Generative AI Power into you...Large Language Models, Data & APIs - Integrating Generative AI Power into you...
Large Language Models, Data & APIs - Integrating Generative AI Power into you...
NETUserGroupBern
 
AAD und .NET
AAD und .NETAAD und .NET
AAD und .NET
NETUserGroupBern
 
SHIFT LEFT WITH DEVSECOPS
SHIFT LEFT WITH DEVSECOPSSHIFT LEFT WITH DEVSECOPS
SHIFT LEFT WITH DEVSECOPS
NETUserGroupBern
 
Securing .NET Core, ASP.NET Core applications
Securing .NET Core, ASP.NET Core applicationsSecuring .NET Core, ASP.NET Core applications
Securing .NET Core, ASP.NET Core applications
NETUserGroupBern
 
Application Security in ASP.NET Core
Application Security in ASP.NET CoreApplication Security in ASP.NET Core
Application Security in ASP.NET Core
NETUserGroupBern
 
Ruby und Rails für .NET Entwickler
Ruby und Rails für .NET EntwicklerRuby und Rails für .NET Entwickler
Ruby und Rails für .NET Entwickler
NETUserGroupBern
 
Einführung in RavenDB
Einführung in RavenDBEinführung in RavenDB
Einführung in RavenDB
NETUserGroupBern
 
What Doctors Can Teach Us on Continuous Learning
What Doctors Can Teach Us on Continuous LearningWhat Doctors Can Teach Us on Continuous Learning
What Doctors Can Teach Us on Continuous Learning
NETUserGroupBern
 
Entity Framework Core - Der Umstieg auf Core
Entity Framework Core - Der Umstieg auf CoreEntity Framework Core - Der Umstieg auf Core
Entity Framework Core - Der Umstieg auf Core
NETUserGroupBern
 
Weiches Zeugs für harte Jungs und Mädels
Weiches Zeugs für harte Jungs und MädelsWeiches Zeugs für harte Jungs und Mädels
Weiches Zeugs für harte Jungs und Mädels
NETUserGroupBern
 
Änderungen im Cardinality Estimator SQL Server 2014
Änderungen im Cardinality Estimator SQL Server 2014Änderungen im Cardinality Estimator SQL Server 2014
Änderungen im Cardinality Estimator SQL Server 2014
NETUserGroupBern
 
Rest Fundamentals
Rest FundamentalsRest Fundamentals
Rest Fundamentals
NETUserGroupBern
 
Refactoring: Mythen & Fakten
Refactoring: Mythen & FaktenRefactoring: Mythen & Fakten
Refactoring: Mythen & Fakten
NETUserGroupBern
 
AngularJs
AngularJsAngularJs
AngularJs
NETUserGroupBern
 
Pragmatische Anforderungen
Pragmatische AnforderungenPragmatische Anforderungen
Pragmatische Anforderungen
NETUserGroupBern
 
Einführung in MongoDB
Einführung in MongoDBEinführung in MongoDB
Einführung in MongoDB
NETUserGroupBern
 
What the hell is PowerShell?
What the hell is PowerShell?What the hell is PowerShell?
What the hell is PowerShell?
NETUserGroupBern
 
Know your warm up
Know your warm upKnow your warm up
Know your warm up
NETUserGroupBern
 
BDD mit Machine.Specifications (MSpec)
BDD mit Machine.Specifications (MSpec)BDD mit Machine.Specifications (MSpec)
BDD mit Machine.Specifications (MSpec)
NETUserGroupBern
 
Versionskontrolle mit Git
Versionskontrolle mit GitVersionskontrolle mit Git
Versionskontrolle mit Git
NETUserGroupBern
 

Mehr von NETUserGroupBern (20)

Large Language Models, Data & APIs - Integrating Generative AI Power into you...
Large Language Models, Data & APIs - Integrating Generative AI Power into you...Large Language Models, Data & APIs - Integrating Generative AI Power into you...
Large Language Models, Data & APIs - Integrating Generative AI Power into you...
 
AAD und .NET
AAD und .NETAAD und .NET
AAD und .NET
 
SHIFT LEFT WITH DEVSECOPS
SHIFT LEFT WITH DEVSECOPSSHIFT LEFT WITH DEVSECOPS
SHIFT LEFT WITH DEVSECOPS
 
Securing .NET Core, ASP.NET Core applications
Securing .NET Core, ASP.NET Core applicationsSecuring .NET Core, ASP.NET Core applications
Securing .NET Core, ASP.NET Core applications
 
Application Security in ASP.NET Core
Application Security in ASP.NET CoreApplication Security in ASP.NET Core
Application Security in ASP.NET Core
 
Ruby und Rails für .NET Entwickler
Ruby und Rails für .NET EntwicklerRuby und Rails für .NET Entwickler
Ruby und Rails für .NET Entwickler
 
Einführung in RavenDB
Einführung in RavenDBEinführung in RavenDB
Einführung in RavenDB
 
What Doctors Can Teach Us on Continuous Learning
What Doctors Can Teach Us on Continuous LearningWhat Doctors Can Teach Us on Continuous Learning
What Doctors Can Teach Us on Continuous Learning
 
Entity Framework Core - Der Umstieg auf Core
Entity Framework Core - Der Umstieg auf CoreEntity Framework Core - Der Umstieg auf Core
Entity Framework Core - Der Umstieg auf Core
 
Weiches Zeugs für harte Jungs und Mädels
Weiches Zeugs für harte Jungs und MädelsWeiches Zeugs für harte Jungs und Mädels
Weiches Zeugs für harte Jungs und Mädels
 
Änderungen im Cardinality Estimator SQL Server 2014
Änderungen im Cardinality Estimator SQL Server 2014Änderungen im Cardinality Estimator SQL Server 2014
Änderungen im Cardinality Estimator SQL Server 2014
 
Rest Fundamentals
Rest FundamentalsRest Fundamentals
Rest Fundamentals
 
Refactoring: Mythen & Fakten
Refactoring: Mythen & FaktenRefactoring: Mythen & Fakten
Refactoring: Mythen & Fakten
 
AngularJs
AngularJsAngularJs
AngularJs
 
Pragmatische Anforderungen
Pragmatische AnforderungenPragmatische Anforderungen
Pragmatische Anforderungen
 
Einführung in MongoDB
Einführung in MongoDBEinführung in MongoDB
Einführung in MongoDB
 
What the hell is PowerShell?
What the hell is PowerShell?What the hell is PowerShell?
What the hell is PowerShell?
 
Know your warm up
Know your warm upKnow your warm up
Know your warm up
 
BDD mit Machine.Specifications (MSpec)
BDD mit Machine.Specifications (MSpec)BDD mit Machine.Specifications (MSpec)
BDD mit Machine.Specifications (MSpec)
 
Versionskontrolle mit Git
Versionskontrolle mit GitVersionskontrolle mit Git
Versionskontrolle mit Git
 

Text Template Transformation Toolkit (T4)

  • 3. Über René Leupold • Siehe Xing ;-) • Speaker VSone 16.-17. Feb. 2011, München (www.vsone.de) – Inheritance mit EF (DB First, Model First, Code First) Hinweis: Verwendung für eigene Präsentationen nur mit Einverständnis des Autors
  • 4. Was ist T4 • Code-Generator mit ASP ähnlicher Syntax • Templatesprache in VB.NET und C# • Generierung von technologieunabhängigem Code • Erstmalig built-in mit VS 2008 • Verbesserte Integration mit VS 2010 Ein Tool das macht was ich will (fast immer)
  • 6. Abgrenzung • Eine das kann VS Ultimate Show • Eine Einführung in die Erstellung eigener DSL’s • Eine T4 Missionierung Was ist dieser Vortrag nicht
  • 7. Agenda • Werkzeuge für Intellisense • Syntax • Prozessablauf und Architektur • Aufbau Text Template • Anwendungsszenarien • Aufbau Preprocessed Template • Beispielprojekt • Vorteile • Herausforderungen • Ressourcen
  • 8. Werkzeuge für Intellisense Tangible T4 – Editor • Visual Studio 2005 • Visual Studio 2008 • Visual Studio 2010 • Wir verlosen heute eine Lizenz, das nächste Mal auch und das übernächste Mal immer noch, bis Ende Jahr ;-) Visual T4 – Editor (Clarius) • Visual Studio 2005 • Visual Studio 2008 • Visual Studio 2010 – mittlerweile Beta
  • 11. Include file= • Relative Pfadangaben dirtemplate.ttinclude • Umgebungsvariablen %pfad%template.ttinclude • VS Makro $(SolutionDir)t4incT4.ttinclude Neu in VS 2010 • Include Folder in Registry setzen Datei ohne Pfad • Drag and Drop - Support mit tangible T4-Editor • Verhält sich wie SSI (Vorsicht) Besonderheit [HKEY_LOCAL_MACHINESoftwareWow6432NodeMicrosoftVisualStudio10.0TextTemplatingIncludeFolders.tt]
  • 12. assembly name= • Umgebungsvariablen %pfad%template.tt • VS Makro $(ProjectDir)binT4.dll Neu in VS 2010 • GAC • Public Assembly Folder VS Datei ohne Pfad • Sperrung der Assembly bis Solution geschlossen wird Besonderheit Alternative: VolatileAssembly
  • 13. assembly name= • Assembly wird nicht mehr gesperrt Neu ab VS 2010 SP1 • Temporäre Kopie der Assembly • So wie VolatileAssembly Angelehnt an Verhalten von ASP.NET • ShadowCopy = false Besonderheit (kann deaktiviert werden) HKEY_LOCAL_MACHINESOFTWARE[Wow6432Node]MicrosoftVisualStudio10.0TextTemplating
  • 14. • Primärer Einsatz für DSL • Ermöglicht Zugriff auf das Modell • Eigene DSL mit VS Visualization & Modeling SDK Class Diagram (als Beispiel) Generated Directive
  • 15. • Klasse muss von DirectiveProcessor ableiten • CodeDom Provider verwenden, wenn Support für C# und VB.NET • Klasse in Registry registrieren • Bsp.: VolatileAssembly • Alternative: Verwenden einer eigenen Assembly DirectiveProcessor Custom Directive
  • 20. ANWENDUNGSSZENARIEN o Debugging o Generierung von Datenbank(Bottom up) o Mehrere Files mit einem Text Template erstellen o Parametrisierte Text Templates o Code in andere Solution erstellen (T4 Toolbox und TemplFileM.) o Visual Studio 2010 Automation o Refactoring handcodierter Klassen mit T4, VS FCM und StoryQ o Beispiele Technologieunabhängigkeit mit Excel o EF Codegenerierungsvorlage erstellen o Model First mit EF CTP 5 und «UML/DSL»
  • 21. Preprocessed Template • Keine Abhängigkeit zu VS • Erweiterbar • Verwendbar in eigenen Anwendungen Neu mit VS 2010
  • 23. ANWENDUNGSSZENARIEN o Erweiterbares Preprocessed Template o StoryQ Preprocessed Template
  • 24. BEISPIELPROJEKT o Angepasster EDM-Designer o Angepasste EF Codegenerierungsvorlage o Generierung des langweiligen Codes o Codezentrierte Entwicklung der funktionalen Anforderungen o Generierung des StoryQ-Testgerüsts aus TFS Workitem o Generierung der WCF-Services basierend auf den geschriebenen Code o T4 Templates ausführen mit F6 ;-)
  • 26. Vorteile Innerhalb der Solution (Freiräume) Code-Qualität Steigerung der Produktivität Technologieunabhängiger Code Keine Methodenbindung Mehr Zeit für die Anforderungen
  • 28. Herausforderungen Menschlicher Faktor Arbeiten ohne den gewohnten Komfort von VS Kein Framework mit Basisskripts Strukturierte Anforderungsdokumente Technologische Weiterentwicklung der Templates Designüberlegungen
  • 29. T4 Erweitert • EntityFrameworkTemplateFileManager (EF.Utility.CS.ttinclude) • Damien Guards Output manager • TemplateFileManager by myself • T4Toolbox (unterstützt Ausgabe in unterschiedliche Projektmappen) Mehrere Dateien mit T4 • MsBuild-Integration (VS Visualization & Modeling SDK) • Chirpy (VS AddIn) T4 mit Build ausführen
  • 30. Ressourcen • Gareth Jones (http://blogs.msdn.com/b/garethj/) • MSDN (http://www.microsoft.com/germany/msdn/webcasts/library.aspx?id=1032456634) • MvcContrib (http://mvccontrib.codeplex.com/) • Oleg Sych (http://www.olegsych.com/) • T4 Mind Map (http://www.mindmeister.com/de/52082132/t4-textvorlagen) • T4 Toolbox (http://t4toolbox.codeplex.com/) • tangible, clarius …
  • 31. Ressourcen • Kay’s ASP.NET MVC 2 HOL T4 Section http://blogs.msdn.com/b/swiss_dpe_team/archive/2010/12/01/asp-net-mvc-hands-on-lab.aspx • Meine Erfahrungen mit T4 http://www.databinding.net/blog/category/t4.html • T4 Beispiele http://www.databinding.net/blog/post/2010/10/28/t4-beispiele-der- advanced-developer-conference-adc-2010-im-mindmap.html
  • 32. Ressourcen Tangible Code Gallery • FileTemplateManagerr
  • 33. Ressourcen Tangible Code Gallery • VsAutomationHelperr
  • 34. Fragen und Diskussion beim Apéro?
  • 35. bzw. .NET User Group Bern Community Feed http://www.dnug-bern.ch/rss.aspx