1 Kompilacja Automatyczna: MSBuildWrocławska Grupa .NET Paweł Hofman Wrocławska Grupa .NET Software Engineer Silicon & Software Systems (S3) TechEd 2002
2 Agenda Historia – pliki .makefile MSBuildWymagania Właściwości, elementy, scenariusze… Sposób działania Rozszerzalność Wykorzystanie Wsparcie ze strony oprogramowania innych firm Przykład rozwiązania praktycznego problemu Pytania TechEd 2002
3 Odrobina historii – makeprogram make / nmake stworzony przez Stuarta Feldmana w 1977 roku (Bell Labs) pliki .makefile składające się z szeregu reguł:
4 Odrobina historii – make (2)Przykład pliku .makefile składającego się z trzech reguł: hello: hello.o aux.o gcc hello.o aux.o -o hello hello.o: hello.c gcc -c hello.c -o hello.o aux.o: aux.c gcc -c aux.c -o aux.o źródło:
5 Odrobina historii – make (3)Przykład pliku .makefile ze zmiennymi: CC=gcc CFLAGS=-g OBJS=hello.o aux.o hello: $(OBJS) $(CC) $(LFLAGS) $^ -o źródło:
6 MS Build
7 MSBuild - Postawowy Wprowadza pojęcia: właściwości (properties)elementów podlegających przetwarzaniu (items) zadań (tasks) scenariuszy (targets) projekt MSBuild właściwości elementy scenariusz zadania zadania
8 MS Build zwyczajne pliki XML dostępny za darmo w wersjach SDK:.NET 2.0 .NET 3.0 i 3.5 Mono – własna implementacja - xbuild pliki projektów *.csproj, *.vbproj, *.vcproj (VS 2008) oraz *.sln pliki *.targets i *.proj
9 Przykład (1)
10 Przykład (2) Sekcje: PropertyGroup ItemGroup...
11 Znaki specjalne źródło - MSDN Znak Opis i znaczenie %znak procenta – odwołania do metadanych (np. pełna ścieżka do pliku) $ znak dolara – odwołanie do właściwości @ znak małpy – odwołanie do elementów listy ( nawias otwierający – użycie w listach ) nawias zamykający – użycie w listach ` apostrof – wyrażenia w warunkach ; średnik – separator elementów listy ? znak zapytania – maska pojedynczego znaku przy nazwie pliku w elementach sekcji Include/Exclude * gwiazdka – maska znaku przy nazwie pliku i rekurencyjnym przeglądaniu katalogów w elementach sekcji Include/Exclude źródło - MSDN
12 MSBuild – Scenariusze (1)zależności wywołań definiowanie własnych uruchamianie z poziomu VisualStudio uruchamianie z poziomu konsoli MSBuild.exe SuperApp.sln /t:Rebuild /p:Configuration=Release
13 MSBuild – Scenariusze (2)
14 MSBuild – Zadania zadania (tasks)warunkowe – if, switch, ale i każdy element posiada atrybuty: Condition="'$(CONFIG)'=='DEBUG'" Condition="!Exists('$(builtdir)')" wbudowane Compile / RegisterAssembly / MSBuild / Exec Copy / Delete / WriteLinesToFile / ReadLinesFromFile Message / Warning / Error… własne zadania napisane w .NET assembly (referencja do klasy w projekcie MSBuild) implementuje interfejs (Microsoft.Build.Framework.ITask)
15 MSBuild – Własne zadaniaWywołanie i zapamiętanie wyniku zadania: ...
18 Przykład (3) Przebieg procesu kompilacji (CSharp.targets):
19 Dodatkowe wsparcie ze strony JetBrains CruiseControl.NETR# 3.1 i 4.0 (*.proj) TeamCity 3.1 CruiseControl.NET poprzez
20 JetBrains - TeamCity
21 JetBrains – TeamCity (2)
22 ZADANIE
23 Problem do rozwiązaniaistniejący projekt różna wersja programu przy kompilacji (zaangażowani programiści (build system – kolejny numer wersja ) zgodny ze własnymi regułami) x.y.z.b
24 Demo
25 MSBuild – Przed i po kompilacjiNiebezpieczny przykład wykonania własnych zadań przed i po kompilacji projektu: te scenariusze mogą już istnieć w załączanym (importowanym) projekcie !!! ...
26 MSBuild – Przed i po kompilacjiBezpieczne wykonanie własnych zadań przed i po kompilacji projektu: ...
27 Podsumowanie podstawowe zasady działaniapoprzez rozszerzenia stworzone przez entuzjastów zyskały ‘bardzo dużo’ funkcjonalności MSBuild umożliwia: rozszerzanie o własne zadania definiowanie wielu scenariuszy warunkowe łączenie scenariuszy
28 Pytania ? Przykładowe pytania, które mogą paść:
29 google + „visual studio videos 2008 extensibility”Źródła Filmy instruktarzowe: google + „visual studio videos 2008 extensibility” Kody źródłowe: Strona domowa: google + „msbuild”