SlideShare ist ein Scribd-Unternehmen logo
1 von 30
T4 Code Generation
Christian Giesswein

1
About Me
• Christian Giesswein
ChristianG@ppedv.at

• Development Trainer bei ppedv AG
• Die bunte Welt von C#/.NET
– C#, WCF, WPF, XAML, Blend, ADO.NET,..

• Open-Source: osm2mssql
• www.giesswein-web.at
• Twitter: @GiessweinWeb
2
Die ppedv AG
• IT-Schulungsunternehmen für
Microsofttechnologien in Deutschland/Österreich
• 11 Standorte 12 Standorte (NEU: Düsseldorf)
• (Entwickler-)Konferenzen
– VSOne (www.vsone.de)
– Advanced Developer Conference (www.adc10.msd)
– GUI & Design (www.guianddesign.com)

• Eigene Fachzeitschrift: Visual Studio One
3
Agenda
• Was werden Sie nun hören?
• T4 Templating
– Microsoft ist super
• Einsatzzwecke
– Apple nicht so super
• Der Prozess
– Linux – naja..
• Hello World mit T4
– T4 – Syntax für 4 – Bier, Wein, Schnaps und Milch
• Die Tanken
• Tooling
• Architektur
• Self-Hosting
4
T4 – Was ist das ?!
T4
=
Code der anderen Code schreibt
damit der Code funktioniert…
T4 Templating
• Text Template Transformation Toolkit
• Beliebige (Text-)Dateitransformationen
durchführen
• Dateiendung: *.tt
• Visual Studio „Unterstützung“
• C# oder VB.NET

6
Verwendungszweck
• Entity Framework
• Compile-Informationen ablegen
– Uhzeit/Pfad/Benutzer/etc.

•
•
•
•

Serialisierung mit T4
XML/JSON zu Klassen transformieren
ASP.NET – Templates erzeugen
…
7
Der T4-Prozess
Entwickler

Template

„Visual Studio“

Compiled
Template

Output

Entwickler
8
Action !!!

T4 Code Generation
Hello World 
Was ist passiert ?

Template

Compiled
Template

Output

10
Compiled Template?
• Ausgangsdatei „HelloWorld.tt“ wird
eingelesen und „kompiliert“
Compiled Template?
• Ein „Host“ (Visual Studio“) führt die
kompilierte Klasse aus und „Transformiert“
somit das Template
Syntax
• <#
– Eine Anweisung folgt

• <#=
– Eine Ausgabe folgt

• <#+
– Eine Klassenerweiterung folgt
Action !!!

T4 Code Generation
Klassenerweiterungen
T4-Anweisungen
• <#@ template
[language="VB"]
[hostspecific="true|TrueFromBase"]
[debug="true"]
[inherits="templateBaseClass"]
[culture="code"]
[compilerOptions="options"]
[visibility="internal"]
[linePragmas="false"]
#>
15
T4-Parameter
• <#@ output
extension=".fileNameExtension"
[encoding="encoding"]
#>

16
T4-Assembly / T4-Import
• <#@ assembly
name="[file name]"
#>
• <#@ import
namespace="namespace"
#>
17
Xml2Classes
• Einfaches, typisches Beispiel Xml2Classes
– Transformierung einer einfaches XML-Datei in eine
Klasse

Action !!!
Problemfindung
• T4-Templates unterstützen Breakpoints
• Ausführen per Kontextmenü „Debug T4
Template“

Action !!!
T4 Toolbox
• T4 Toolbox
– Syntax Highlighting
– Gratis
– http://www.olegsych.com/t4toolbox

20
DevArt
•
•
•
•
•

Unterstützt VS 2008/2010/2012
IntelliSense
Syntax Highlighting
Gratis!
http://www.devart.com/t4editor/download.html
T4 – Advanced
• T4 kann auch das eigene Projekt erweitern
• Eigene Assembly mit:
– <#@ Assembly name="$(TargetPath)" #>

• Achtung! Letzter Buildstand!

Action !!!
22
Action !!!

T4 Code Generation
MVVM
Automatische ViewModel-Erzeugung
T4 - Advanced
• T4 Unterstützt Out-Of-The-Box nur eine
Ausgabedatei pro T4-Vorlage
– Kann modifiziert werden

Action !!!
T4 – Deep Dive

25
T4 – Eigener Host
• Visual Studio SDK
– Microsoft.VisualStudio.TextTemplating.11.0
– Microsoft.VisualStudio.TextTemplating.Interfaces.1
1.0

• Engine aus dem SDK  Transformation
• Host kann selber geschrieben werden:
ITextTemplatingEngineHost
Action !!!
26
T4 „Automatic Run“
• T4 Templates werden beim Speichern
(STRG+S) automatisch ausgeführt.
• TextTransformer.exe ist der Standardhost
– Möglichkeit 1: Per PRE-Build Ereignis
– C:Program Files (x86)Common FilesMicrosoft
SharedTextTemplating12.0TextTransform.exe
T4 „Automatic Run“
• Seit VS2012 auch „Out-Of-The-Box“:
– Möglichkeit 2: MSBuild

• Projekt (*.csproj) bearbeiten
• Erfordert Visual Studio 2012 Data Visualization
SDK
<PropertyGroup>
<TransformOnBuild>true
</TransformOnBuild>
</PropertyGroup>
<Import
Action !!!
Project="$(MSBuildExtensionsPath)MicrosoftVisualStudiov11.
0TextTemplatingMicrosoft.TextTemplating.targets" />
Entity Framework
• Entity Framework mit T4 (=DbContext
Generator)
• T4 Templates generieren aus *.EDMX die
POCO-Klassen
– C:Program Files (x86)Microsoft Visual Studio
11.0Common7IDEExtensionsMicrosoftEntity
Framework ToolsTemplatesIncludes
Action !!!
29
FRAGEN

?

Weitere ähnliche Inhalte

Ähnlich wie NRWConf2013_T4CodeGeneration

Javascript done right
Javascript done rightJavascript done right
Javascript done rightDirk Ginader
 
C/ C++ for Notes & Domino Developers
C/ C++ for Notes & Domino DevelopersC/ C++ for Notes & Domino Developers
C/ C++ for Notes & Domino DevelopersUlrich Krause
 
Der gesamte Redaktionsprozess mit Open Source
Der gesamte Redaktionsprozess mit Open SourceDer gesamte Redaktionsprozess mit Open Source
Der gesamte Redaktionsprozess mit Open Sourceyellowcow
 
2005 - NRW Conf: Design, Entwicklung und Tests
2005 - NRW Conf: Design, Entwicklung und Tests2005 - NRW Conf: Design, Entwicklung und Tests
2005 - NRW Conf: Design, Entwicklung und TestsDaniel Fisher
 
FMK2015: FrameWork Konzepte in FileMaker Pro by Wolfgang Wunderlich
FMK2015: FrameWork Konzepte in FileMaker Pro by Wolfgang WunderlichFMK2015: FrameWork Konzepte in FileMaker Pro by Wolfgang Wunderlich
FMK2015: FrameWork Konzepte in FileMaker Pro by Wolfgang WunderlichVerein FM Konferenz
 
Perl Renaissance Reloaded
Perl Renaissance ReloadedPerl Renaissance Reloaded
Perl Renaissance ReloadedGregor Goldbach
 
DevOps: Automatisierte Deployments mit TFS & Octopus Deploy
DevOps: Automatisierte Deployments mit TFS & Octopus DeployDevOps: Automatisierte Deployments mit TFS & Octopus Deploy
DevOps: Automatisierte Deployments mit TFS & Octopus DeployMark Lechtermann
 
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 verbindenAptly GmbH
 
BASTA Spring 2016: Test- und Releaseumgebungen der nächsten Generation mit TF...
BASTA Spring 2016: Test- und Releaseumgebungen der nächsten Generation mit TF...BASTA Spring 2016: Test- und Releaseumgebungen der nächsten Generation mit TF...
BASTA Spring 2016: Test- und Releaseumgebungen der nächsten Generation mit TF...Marc Müller
 
FMK 2013 Xojo, Christian Schmitz
FMK 2013 Xojo, Christian SchmitzFMK 2013 Xojo, Christian Schmitz
FMK 2013 Xojo, Christian SchmitzVerein FM Konferenz
 
Tipps & Tricks für Erweiterungsentwickler - JoomlaDay Deutschland 2014 - Köln
Tipps & Tricks für Erweiterungsentwickler - JoomlaDay Deutschland 2014 - KölnTipps & Tricks für Erweiterungsentwickler - JoomlaDay Deutschland 2014 - Köln
Tipps & Tricks für Erweiterungsentwickler - JoomlaDay Deutschland 2014 - KölnViktor Vogel
 
Webinar ITPro Kollektion SkillSoft
Webinar ITPro Kollektion SkillSoftWebinar ITPro Kollektion SkillSoft
Webinar ITPro Kollektion SkillSoftSusanne_fischer
 
FMK 2013 Schnittstellen Datenaustausch, Longin Ziegler
FMK 2013 Schnittstellen Datenaustausch, Longin ZieglerFMK 2013 Schnittstellen Datenaustausch, Longin Ziegler
FMK 2013 Schnittstellen Datenaustausch, Longin ZieglerVerein FM Konferenz
 
Text Template Transformation Toolkit (T4)
Text Template Transformation Toolkit (T4)Text Template Transformation Toolkit (T4)
Text Template Transformation Toolkit (T4)NETUserGroupBern
 
XING learningZ Event: Umfangreiche Dokumente effizient formatieren
XING learningZ Event: Umfangreiche Dokumente effizient formatierenXING learningZ Event: Umfangreiche Dokumente effizient formatieren
XING learningZ Event: Umfangreiche Dokumente effizient formatierenDigicomp Academy AG
 
GitLab: CI-Pipelines | PHP Usergroup Hamburg 20.03.2018
GitLab: CI-Pipelines | PHP Usergroup Hamburg 20.03.2018GitLab: CI-Pipelines | PHP Usergroup Hamburg 20.03.2018
GitLab: CI-Pipelines | PHP Usergroup Hamburg 20.03.2018Christian Mücke
 
Foreman: Docker Integration (Webinar vom 05. Oktober_2016)
Foreman: Docker Integration (Webinar vom 05. Oktober_2016)Foreman: Docker Integration (Webinar vom 05. Oktober_2016)
Foreman: Docker Integration (Webinar vom 05. Oktober_2016)NETWAYS
 

Ähnlich wie NRWConf2013_T4CodeGeneration (20)

Roslyn DDC Kompakt 2014
Roslyn DDC Kompakt 2014Roslyn DDC Kompakt 2014
Roslyn DDC Kompakt 2014
 
Windows Powershell
Windows PowershellWindows Powershell
Windows Powershell
 
Javascript done right
Javascript done rightJavascript done right
Javascript done right
 
C/ C++ for Notes & Domino Developers
C/ C++ for Notes & Domino DevelopersC/ C++ for Notes & Domino Developers
C/ C++ for Notes & Domino Developers
 
Der gesamte Redaktionsprozess mit Open Source
Der gesamte Redaktionsprozess mit Open SourceDer gesamte Redaktionsprozess mit Open Source
Der gesamte Redaktionsprozess mit Open Source
 
2005 - NRW Conf: Design, Entwicklung und Tests
2005 - NRW Conf: Design, Entwicklung und Tests2005 - NRW Conf: Design, Entwicklung und Tests
2005 - NRW Conf: Design, Entwicklung und Tests
 
TYPO3 Translations
TYPO3 Translations TYPO3 Translations
TYPO3 Translations
 
FMK2015: FrameWork Konzepte in FileMaker Pro by Wolfgang Wunderlich
FMK2015: FrameWork Konzepte in FileMaker Pro by Wolfgang WunderlichFMK2015: FrameWork Konzepte in FileMaker Pro by Wolfgang Wunderlich
FMK2015: FrameWork Konzepte in FileMaker Pro by Wolfgang Wunderlich
 
Perl Renaissance Reloaded
Perl Renaissance ReloadedPerl Renaissance Reloaded
Perl Renaissance Reloaded
 
DevOps: Automatisierte Deployments mit TFS & Octopus Deploy
DevOps: Automatisierte Deployments mit TFS & Octopus DeployDevOps: Automatisierte Deployments mit TFS & Octopus Deploy
DevOps: Automatisierte Deployments mit TFS & Octopus Deploy
 
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
 
BASTA Spring 2016: Test- und Releaseumgebungen der nächsten Generation mit TF...
BASTA Spring 2016: Test- und Releaseumgebungen der nächsten Generation mit TF...BASTA Spring 2016: Test- und Releaseumgebungen der nächsten Generation mit TF...
BASTA Spring 2016: Test- und Releaseumgebungen der nächsten Generation mit TF...
 
FMK 2013 Xojo, Christian Schmitz
FMK 2013 Xojo, Christian SchmitzFMK 2013 Xojo, Christian Schmitz
FMK 2013 Xojo, Christian Schmitz
 
Tipps & Tricks für Erweiterungsentwickler - JoomlaDay Deutschland 2014 - Köln
Tipps & Tricks für Erweiterungsentwickler - JoomlaDay Deutschland 2014 - KölnTipps & Tricks für Erweiterungsentwickler - JoomlaDay Deutschland 2014 - Köln
Tipps & Tricks für Erweiterungsentwickler - JoomlaDay Deutschland 2014 - Köln
 
Webinar ITPro Kollektion SkillSoft
Webinar ITPro Kollektion SkillSoftWebinar ITPro Kollektion SkillSoft
Webinar ITPro Kollektion SkillSoft
 
FMK 2013 Schnittstellen Datenaustausch, Longin Ziegler
FMK 2013 Schnittstellen Datenaustausch, Longin ZieglerFMK 2013 Schnittstellen Datenaustausch, Longin Ziegler
FMK 2013 Schnittstellen Datenaustausch, Longin Ziegler
 
Text Template Transformation Toolkit (T4)
Text Template Transformation Toolkit (T4)Text Template Transformation Toolkit (T4)
Text Template Transformation Toolkit (T4)
 
XING learningZ Event: Umfangreiche Dokumente effizient formatieren
XING learningZ Event: Umfangreiche Dokumente effizient formatierenXING learningZ Event: Umfangreiche Dokumente effizient formatieren
XING learningZ Event: Umfangreiche Dokumente effizient formatieren
 
GitLab: CI-Pipelines | PHP Usergroup Hamburg 20.03.2018
GitLab: CI-Pipelines | PHP Usergroup Hamburg 20.03.2018GitLab: CI-Pipelines | PHP Usergroup Hamburg 20.03.2018
GitLab: CI-Pipelines | PHP Usergroup Hamburg 20.03.2018
 
Foreman: Docker Integration (Webinar vom 05. Oktober_2016)
Foreman: Docker Integration (Webinar vom 05. Oktober_2016)Foreman: Docker Integration (Webinar vom 05. Oktober_2016)
Foreman: Docker Integration (Webinar vom 05. Oktober_2016)
 

NRWConf2013_T4CodeGeneration