Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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
  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
  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
  4. 4 Sebastian P.R. Gingter - @PhoenixHawk EKON 16 - November

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

    2012 è §  Ist ein XML-File §  Ein relativ vollständiges Beispiel: Kernelemente Das Projekt
  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
  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
  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: <Files Include=“src\**\*.cs“> Legt alle Dateien unterhalb des Ordners ‘src‘ (inklusive aller Unterverzeichnisse) die auf ‘.cs‘ enden in das Item ‘Files‘ <OtherFiles Include=“@(FileGroup1);@(FileGroup2)“ /> Kombiniert mehrere Items zu einem neuen. Kernelemente Items 2/2
  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
  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
  11. 11 Sebastian P.R. Gingter - @PhoenixHawk EKON 16 - November

    2012 è §  Normale Auswertung / Ersetzung von Properties: $(PropertyName) <Message Text=“Output Directory is: $(OutputDir)“ /> §  Normale Auswertung / Ersetzung von Items: @(ItemName) <Message Text=“Copying Files: @(SourceFiles)“ /> <Copy SourceFiles=“@(SourceFiles)“ DestinationFolder=“$(Temp)“ /> §  Transformation (Zugriff auf Metadata) @(ItemName->‘%(MetadataName)‘) <TargetFiles Include=“@(SourceFiles->‘($Temp)%(Filename)%(Extension)‘)“ /> §  Batching <Message Text=“Copying File: %(SourceFiles.Identity)“ /> Kernelemente Value expansion
  12. 12 Sebastian P.R. Gingter - @PhoenixHawk EKON 16 - November

    2012 è Kernelemente Value expansion
  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: <target Condition=“ ‘$(Property)‘ == ‘CertainValue‘ “> <MyProperty Condition=“Exists(‘@(SomeItem)‘)“>true</MyProperty> Kernelemente Conditions
  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…
  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…
  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
  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
  18. 18 Sebastian P.R. Gingter - @PhoenixHawk EKON 16 - November

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

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

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

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

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

    2012 è DEMO §  Web.config transformation §  http://go.microsoft.com/fwlink/?LinkId=125889 §  UsingTask TransformXml <TransformXml Source, Transform, Destination /> Demos & Hands-on MSBuild
  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?