Kompilacja Automatyczna: MSBuild

1 Kompilacja Automatyczna: MSBuildWrocławska Grupa .NET P...
Author: Krystiana Kozioł
0 downloads 2 Views

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) xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> EXE VisualEditor.Registry VisualEditor.Registry VisualEditor.Registry.Program true ..\..\..\output\ TRACE 4 ...

10 Przykład (2) Sekcje: PropertyGroup ItemGroup... Sekcje: PropertyGroup właściwości (również warunkowe) o dowolnych nazwach ItemGroup elementy kompilacji (również zależne rekurencyjnie) zależności (referencje do innych modułów i metadanych) import innych projektów

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) EXE VisualProject.Registry

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: ... 16 MSBuild – Zadania (2) metadane: źródło - MSDN Element Opis i znaczenie... metadane: źródło - MSDN Element Opis i znaczenie %(FullPath) pełna ścieżka dokumentu; C:\MyProject\Source\Program.cs %(RootDir) dysk; C:\ %(Filename) nazwa pliku; Program %(Extension) rozszerzenie; .cs %(RelativeDir) folder względny; Source\ %(Directory) folder pliku; MyProject\Source\ %(RecursiveDir) folder przy rekurencyjnym przeglądaniu w poszukiwaniu pliku; MyProject\Source\ { "@context": "http://schema.org", "@type": "ImageObject", "contentUrl": "http://slideplayer.pl/89471/1/images/16/MSBuild+%E2%80%93+Zadania+%282%29+metadane%3A+%C5%BAr%C3%B3d%C5%82o+-+MSDN+Element+Opis+i+znaczenie.jpg", "name": "MSBuild – Zadania (2) metadane: źródło - MSDN Element Opis i znaczenie", "description": "... metadane: źródło - MSDN. Element. Opis i znaczenie. %(FullPath) pełna ścieżka dokumentu; C:\MyProject\Source\Program.cs. %(RootDir) dysk; C:\ %(Filename) nazwa pliku; Program. %(Extension) rozszerzenie; .cs. %(RelativeDir) folder względny; Source\ %(Directory) folder pliku; MyProject\Source\ %(RecursiveDir) folder przy rekurencyjnym przeglądaniu w poszukiwaniu pliku; MyProject\Source\", "width": "800" }

18 Przykład (3) Przebieg procesu kompilacji (CSharp.targets): BuildOnlySettings; PrepareForBuild; PreBuildEvent; UnmanagedUnregistration; ResolveReferences; PrepareResources; ResolveKeySource; Compile; GenerateSerializationAssemblies; CreateSatelliteAssemblies; GenerateManifests; GetTargetPath; PrepareForRun; UnmanagedRegistration; IncrementalClean; PostBuildEvent

19 Dodatkowe wsparcie ze strony JetBrains CruiseControl.NETR# 3.1 i 4.0 (*.proj) TeamCity 3.1 CruiseControl.NET poprzez MSBuild Sidekick dodatkowe zadania od społeczności .NET pakowanie wysyłanie na serwer ftp wysyłanie wiadomości pocztowych uruchamianie testów NUnit

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: ... CreateVersionFile; $(CoreBuildDependsOn); DeleteVersionFile;

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”