$30 off During Our Annual Pro Sale. View Details »

EKON 16: MSBuild

EKON 16: MSBuild

My slides for the MSBuild talk at EKON 16.

Sebastian Gingter

November 06, 2012
Tweet

More Decks by Sebastian Gingter

Other Decks in Technology

Transcript

  1. 1
    Sebastian P.R. Gingter - @PhoenixHawk EKON 16 - November 2012
    Sebastian P.R. Gingter - @PhoenixHawk
    MSBuild
    Inside the Microsoft® Build Engine
    Sebastian P.R. Gingter
    EKON 16 – November 2012
    Slides: https://speakerdeck.com/u/phoenixhawk
    Sources: https://github.com/gingters/EKON16_MSBuild

    View Slide

  2. 2
    Sebastian P.R. Gingter - @PhoenixHawk EKON 16 - November 2012
    è
    §  MSBuild ist die Technologie, die für Builds in Visual Studio
    & Rad Studio verwendet wird
    §  MSBuild kann mehr als nur den Prozess
    „Source Files à Binaries“
    steuern
    §  Dieses Training soll die Möglichkeiten von MSBuild aufzeigen und
    Anwendungsfälle sowie Erweiterungsoptionen erklären
    §  Nach diesem Training sollte ein Entwickler in der Lage sein, ein MSBuild
    Projekt zu verstehen und mit einfachen Operationen (z.B. File Copy,
    Web.config transformation, Update assembly Info) anzupassen sowie um
    die Erweiterungsmöglichkeiten mit selbst geschriebenen Tasks wissen
    §  Wir werden im Laufe des Trainings ein einfaches MSBuild Projekt zum
    kopieren von Files mit Web.config Tranformationen erstellen
    MSBuild
    Inside the Microsoft® Build Engine

    View Slide

  3. 3
    Sebastian P.R. Gingter - @PhoenixHawk EKON 16 - November 2012
    è
    §  MSBuild im Überflug
    §  Kernelemente
    (Projekt, Properties, Items, Tasks, Targets, Conditions)
    §  Value expansion
    §  Other things to know…
    §  MSBuild Command Line Switches
    §  Beispiel-Anwendungen
    §  Demos
    §  Ressourcen
    Inside the Microsoft® Build Engine
    Agenda

    View Slide

  4. 4
    Sebastian P.R. Gingter - @PhoenixHawk EKON 16 - November 2012
    è
    §  Das Projekt
    §  Properties
    §  Items
    §  Tasks
    §  Targets
    §  Conditions
    Kernelemente
    Die Kernelemente im Überblick

    View Slide

  5. 5
    Sebastian P.R. Gingter - @PhoenixHawk EKON 16 - November 2012
    è
    §  Ist ein XML-File
    §  Ein relativ vollständiges Beispiel:
    Kernelemente
    Das Projekt

    View Slide

  6. 6
    Sebastian P.R. Gingter - @PhoenixHawk EKON 16 - November 2012
    è
    §  Sind die ‚Variablen‘ in einem MSBuild Projekt
    §  Key-Value pair, mehr oder weniger ‚Immutable‘
    §  z.B. nahezu alles, was in den Projekt-Eigenschaften festgelegt wird
    §  meist verwendet für Einstellungen oder Pfade
    §  Referenz: http://msdn.microsoft.com/en-us/library/ms171458.aspx
    Reservierte Werte: http://msdn.microsoft.com/en-us/library/ms164309.aspx
    §  Beispiele für reservierte Properties: MSBuildProjectFile, MSBuildProjectDirectory
    §  Andere wichtige Properties: SolutionDir, ProjectDir, OutputPath
    Kernelemente
    Properties

    View Slide

  7. 7
    Sebastian P.R. Gingter - @PhoenixHawk EKON 16 - November 2012
    è
    §  Items sind in aller Regel die Files, mit denen der Build-Prozess arbeitet
    §  Immer in Array-Form (Semikolon-separiert)
    erstellt aus z.B. einzelnen Dateiangaben, Semikolon-separierten strings,
    Properties, oder andere Items
    Die „Include“ – Anweisung erweitert ein bestehendes Array um Items
    §  Beispiel:
    §  Compile – werden an den Compiler übergeben
    §  Reference – werden an den Compiler als Referenzen übergeben
    §  EmbeddedRessource – werden mit dem Ressource-Builder eingelinkt
    §  None – werden nur durch die IDE angezeigt
    §  Können beliebige Metadaten enthalten
    §  Well-known Metadata Keys:
    http://msdn.microsoft.com/en-us/library/ms164313.aspx
    Kernelemente
    Items 1/2

    View Slide

  8. 8
    Sebastian P.R. Gingter - @PhoenixHawk EKON 16 - November 2012
    è
    §  Wildcards für Items:
    §  ? – Exakt ein zeichen
    §  * - beliebig viele Zeichen ausser slashes
    §  ** - beliebig viele Zeichen, inklusive slashes. Hiermit ist Rekursion möglich
    §  Beispiele:

    Legt alle Dateien unterhalb des Ordners ‘src‘ (inklusive aller Unterverzeichnisse)
    die auf ‘.cs‘ enden in das Item ‘Files‘

    Kombiniert mehrere Items zu einem neuen.
    Kernelemente
    Items 2/2

    View Slide

  9. 9
    Sebastian P.R. Gingter - @PhoenixHawk EKON 16 - November 2012
    è
    §  Tasks sind die kleinste ‚Unit of Work‘ in einem MSBuild Projekt
    §  Tasks können nur in einem Target vorkommen
    §  Tasks lassen sich ‚Batchen‘
    = mehrfach für unterschiedliche Items einzeln ausführen
    §  Verfügbare Tasks siehe u.a.
    §  http://msdn2.microsoft.com/en-us/library/7z253716.aspx
    §  Intellisense
    §  $(MSBuildExtensions)\*.tasks
    §  Eigene Tasks J
    §  Oder auch im „Preprocessed“ Project (später unter ‚Debugging‘)
    Kernelemente
    Tasks

    View Slide

  10. 10
    Sebastian P.R. Gingter - @PhoenixHawk EKON 16 - November 2012
    è
    §  Targets sind sequentielle Folgen von Tasks
    §  Das default target bzw. die initial targets können direkt auf dem Projekt-Node
    angegeben werden. Es kann nur ein Default target geben, aber mehrere
    InitialTargets, die auch von inkludierten Projekten eingetragen werden können.
    Initial targets sollten nur für sanity checks verwendet werden
    §  Reihenfolge der Targets
    §  Initial Targets -> Default Target
    §  Wird sonst deklarativ durch BeforeTargets / AfterTargets /
    DependsOnTargets festgelegt
    §  Targets können mit einem Task andere Targets aufrufen
    §  OnError Task, der nur im Fehlerfall andere Targets aufruft
    Kernelemente
    Targets

    View Slide

  11. 11
    Sebastian P.R. Gingter - @PhoenixHawk EKON 16 - November 2012
    è
    §  Normale Auswertung / Ersetzung von Properties:
    $(PropertyName)

    §  Normale Auswertung / Ersetzung von Items:
    @(ItemName)


    §  Transformation (Zugriff auf Metadata)
    @(ItemName->‘%(MetadataName)‘)
    Include=“@(SourceFiles->‘($Temp)%(Filename)%(Extension)‘)“
    />
    §  Batching

    Kernelemente
    Value expansion

    View Slide

  12. 12
    Sebastian P.R. Gingter - @PhoenixHawk EKON 16 - November 2012
    è Kernelemente
    Value expansion

    View Slide

  13. 13
    Sebastian P.R. Gingter - @PhoenixHawk EKON 16 - November 2012
    è
    §  Conditions sind auf beinahe jedem XML-Element eines MSBuild-Projektes
    möglich. Das Element wird nur dann ausgewertet bzw. ausgeführt,
    wenn die Condition zutrifft
    §  Werte in Conditions müssen escaped werden
    §  Mögliche Operatoren sind:
    ==, !=, <, <=, >, >=, Exists, !, And, Or, HasTrailingSlash(‘string‘), ()
    http://msdn.microsoft.com/en-us/library/7szfhaft.aspx
    §  Beispiele:

    true
    Kernelemente
    Conditions

    View Slide

  14. 14
    Sebastian P.R. Gingter - @PhoenixHawk EKON 16 - November 2012
    è
    §  Alle Pfad-Angaben relativ zum aktuellen (!) Project File
    §  Ausführungsreihenfolge:
    §  Auswerten aller Properties
    §  Auswerten aller Items
    §  Ausführung der Targets in der Reihenfolge
    der definierten Abhängigkeiten
    §  Umgebungsvariablen stehen einfach als gleichnamige Properties zur
    Verfügung, z.B. $(Temp), $(windir)
    Kernelemente
    Things to know…

    View Slide

  15. 15
    Sebastian P.R. Gingter - @PhoenixHawk EKON 16 - November 2012
    è
    §  Calling the .NET API from MSBuild:
    http://blogs.msdn.com/b/visualstudio/archive/2010/04/02/msbuild-
    property-functions.aspx
    §  $( [Namespace.Type]::Method(..params..) )
    $( [Namespace.Type]::Property )
    $( [Namespace.Type]::set_Property(value) )
    §  Aber NUR auf begrenzten Typen (Auszug, siehe Link für alle):
    Nahezu alle Value-Types (Byte, Char, String, Ints, Floats, Enum,
    DateTime, TimeSpan, Version, Guid), System.IO.Path,
    System.Text.RegularExpressions.Regex sowie einige ausgewählte
    Member von System.IO.File, System.IO.Directory,
    System.Environment
    §  Sonder-Typ: [MSBuild] mit einigen Hilfsfunktionen
    http://msdn.microsoft.com/en-us/library/dd633440.aspx
    Kernelemente
    Things to know…

    View Slide

  16. 16
    Sebastian P.R. Gingter - @PhoenixHawk EKON 16 - November 2012
    è
    §  In MSBuild passiert viel „Magie“, deshalb sind zusätzliche
    Informationen manchmal Gold wert:
    §  Logging:
    msbuild /filelogger (/fl)
    msbuild /verbosity (/v)
    Werte: quiet, minimal, normal, detailed, diagnostic
    §  Magic:
    msbuild /preprocess (oder /pp)
    msbuild /pp:file
    (funktioniert nicht auf Solutions, nur auf Projekten)
    Preprocess kombiniert alle verwendeten Projects
    und löst alle project includes auf
    §  SET MSBuildEmitSolution=1 (Environment-Variable)
    hiermit wird zu einer zu bauenden Solution ein .metaproj erzeugt,
    für dieses funktioniert dann auch /pp
    Kernelemente
    „Debugging“ MSBuild

    View Slide

  17. 17
    Sebastian P.R. Gingter - @PhoenixHawk EKON 16 - November 2012
    è
    §  Task um die Produktversion anzupassen
    §  Release builds
    §  Sanity checks (prüfen im SVN ob Branches / Tags etc. existieren)
    §  Checkout des Branches, ändern der svn-externals inkl. svn-update
    §  Test-Build
    §  Commit der svn-externals
    §  Erstellen & committen des Tags, neuer checkout des Tags
    §  Release-Build des Tags, commit der binaries nach /releases
    §  Reset der svn-externals auf dem Branch & commit
    §  Auslesen und Erstellen der Changelogs
    Anwendungsmöglichkeiten
    MSBuild – Beispiele

    View Slide

  18. 18
    Sebastian P.R. Gingter - @PhoenixHawk EKON 16 - November 2012
    è
    DEMO
    §  Hello World
    Demos & Hands-on
    MSBuild

    View Slide

  19. 19
    Sebastian P.R. Gingter - @PhoenixHawk EKON 16 - November 2012
    è
    DEMO
    §  Messages
    Demos & Hands-on
    MSBuild

    View Slide

  20. 20
    Sebastian P.R. Gingter - @PhoenixHawk EKON 16 - November 2012
    è
    DEMO
    §  Properties
    Demos & Hands-on
    MSBuild

    View Slide

  21. 21
    Sebastian P.R. Gingter - @PhoenixHawk EKON 16 - November 2012
    è
    DEMO
    §  Items
    Demos & Hands-on
    MSBuild

    View Slide

  22. 22
    Sebastian P.R. Gingter - @PhoenixHawk EKON 16 - November 2012
    è
    DEMO
    §  Includes
    Demos & Hands-on
    MSBuild

    View Slide

  23. 23
    Sebastian P.R. Gingter - @PhoenixHawk EKON 16 - November 2012
    è
    DEMO
    §  Web.config transformation
    §  http://go.microsoft.com/fwlink/?LinkId=125889
    §  UsingTask TransformXml

    Demos & Hands-on
    MSBuild

    View Slide

  24. 24
    Sebastian P.R. Gingter - @PhoenixHawk EKON 16 - November 2012
    è
    §  MSDN
    §  http://msdn.microsoft.com/en-us/library/0k6kkbsd.aspx
    §  Bücher:
    §  http://www.amazon.de/Inside-Microsoft%C2%AE-Build-Engine-
    PRO-Developer/dp/0735626286
    Ressourcen
    Wo gibt’s weitere Infos?

    View Slide