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
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
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
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
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
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
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
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…
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…
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
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