2. Programowanie Komponentowe
Wykład #6: Wersjonowanie
Mikołaj Olszewski
Wydział Zastosowan Informatyki i Matematyki
Szkoły Głównej Gospodarstwa Wiejskiego
18.11.2014
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #6 2 / 32
3. Plan wykładu
1 Wersjonowanie asemblacji
Numer wersji
Modele wdrazania
Silne nazwy
Polityka kompatybilnosci
2 Wersjonowanie w VisualStudio
3 Wersjonowanie CLR
4 Podsumowanie
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #6 3 / 32
4. Wprowadzenie
Konieczne w systemie komponentowym
Współgranie odpowiednich wersji
Model współdzielenia
prywatne
współdzielone
DLL Hell
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #6 4 / 32
5. Wersjonowanie asemblacji
Plan wykładu
1 Wersjonowanie asemblacji
Numer wersji
Modele wdrazania
Silne nazwy
Polityka kompatybilnosci
2 Wersjonowanie w VisualStudio
3 Wersjonowanie CLR
4 Podsumowanie
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #6 5 / 32
7. Wersjonowanie asemblacji Numer wersji
Numer wersji
[assembly: AssemblyVersion("1.2.3.4")]
Ustawienia projektu
AssemblyInfo.cs
Referencja uwzglednia
numer wersji
1 . a s s embl y e x t e rn
MyAssembly
2 f
3 . v e r 1 : 2 : 3 : 4
4 g
Zapewnienie
kompatybilnosci podczas
uruchamiania
silne nazwy
przyjazne nazwy
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #6 7 / 32
8. Wersjonowanie asemblacji Numer wersji
Elementy numeru wersji
1 . 2 . 3 . 4
" " " "
major minor build revision
Dowolna semantyka
Konwencja
revision — małe zmiany (np. bugfixing, zmiany w lokalizacji), w pełni
podmienialne
build — rekompilacja zródeł (np. na inna platforme)
minor — znaczace zmiany z intencja zachowania kompatybilnosci
major — duze zmiany, mozliwy brak kompatybilnosci
Semantyczne wersjonowanie
Konieczne w projekcie
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #6 8 / 32
9. Wersjonowanie asemblacji Numer wersji
Elementy numeru wersji
1 . 2 . 3 . 4
" " " "
major minor build revision
Dowolna semantyka
Konwencja
revision — małe zmiany (np. bugfixing, zmiany w lokalizacji), w pełni
podmienialne
build — rekompilacja zródeł (np. na inna platforme)
minor — znaczace zmiany z intencja zachowania kompatybilnosci
major — duze zmiany, mozliwy brak kompatybilnosci
Semantyczne wersjonowanie
Konieczne w projekcie
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #6 8 / 32
10. Wersjonowanie asemblacji Numer wersji
Numerowanie wersji
Domyslnie: 1.0.0.0
Samodzielne
Czesciowo automatyczne
1.2.*
build — liczba dni od 1.1.2000
revision — liczba sekund od północy / 2
przykład: 1.2.1642.18000
1.2.3.*
[assembly: AssemblyInformationalVersion("1.2.3.4")]
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #6 9 / 32
11. Wersjonowanie asemblacji Numer wersji
Programowe pobieranie wersji
1 Assembly a s s embl y = Assembly . Ge tEx e cut ingAs s embl y ( ) ;
2 Ve r s i o n v e r s i o n = a s s embl y . GetName ( ) . Ve r s i o n ;
3 Trace . Wr i t eLi n e ( ”Nr w e r s j i to ” + v e r s i o n ) ;
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #6 10 / 32
12. Wersjonowanie asemblacji Modele wdrazania
Modele wdrazania asemblacji
Asemblacje prywatne
lokalna kopia na potrzeby aplikacji
kopiowanie do katalogu
zazwyczaj podczas instalacji
nowy egzemplarz nadpisuje stary
zazwyczaj wsteczna kompatybilnosc
Asemblacje współdzielone
uzywane przez wiele aplikacji
Global Assembly Cache
wsparcie dla wielu wersji
nie jest konieczne zachowanie wstecznej kompatybilnosci
uproszczenie zarzadzania wersjami
Nie mieszac!
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #6 11 / 32
13. Wersjonowanie asemblacji Modele wdrazania
Modele wdrazania asemblacji
Asemblacje prywatne
lokalna kopia na potrzeby aplikacji
kopiowanie do katalogu
zazwyczaj podczas instalacji
nowy egzemplarz nadpisuje stary
zazwyczaj wsteczna kompatybilnosc
Asemblacje współdzielone
uzywane przez wiele aplikacji
Global Assembly Cache
wsparcie dla wielu wersji
nie jest konieczne zachowanie wstecznej kompatybilnosci
uproszczenie zarzadzania wersjami
Nie mieszac!
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #6 11 / 32
14. Wersjonowanie asemblacji Modele wdrazania
Assembly resolver
Przekazywanie dokładnej nazwy i numeru wersji
Poszukiwanie kompatybilnej asemblacji
1 przeszukiwanie GAC (po silnej nazwie)
2 przeszukiwanie folderu aplikacji (ew. innego)
3 rzucanie wyjatku
odwrotnie bez silnej nazwy
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #6 12 / 32
16. Wersjonowanie asemblacji Silne nazwy
Silne nazwy asemblacji
GAC zawiera komponenty od róznych dostawców
Potrzeba jednoznacznej identyfikacji komponentu
GUID
COM
mozliwosc kopiowania
brak autentykacji i zapewnienia integracji
Silna nazwa — identyfikacja twórcy i zawartosci
para kluczy szyfrujacych: publiczny i prywatny
podpis asemblacji (zaszyfrowany hash)
podpis i klucz publiczny dołaczone do asemblacji
ograniczanie dostepu do kluczy
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #6 14 / 32
17. Wersjonowanie asemblacji Silne nazwy
Przechowywanie w GAC
C:nWINDOWSnassemblynGAC MSILnMySharedAssembly
n1.2.3.4 745901a54f88909bnMySharedAssembly.dll
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #6 15 / 32
18. Wersjonowanie asemblacji Silne nazwy
Referencje po silnej nazwie
1 . a s s embl y e x t e rn MyServerAssembly
2 f
3 . p u b l i c k e y t o k e n = (22 90 49 07 87 53 81 9B )
4 . v e r 1 : 2 : 3 : 4
5 g
Znajdowanie asemblacji
1 Wyszukiwanie po przyjaznej nazwie
2 Zczytanie klucza publicznego i porównanie tokenów
3 Odszyfrowanie podpisu i porównanie hasha
Polityka łaczenia silnych i przyjaznych nazw
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #6 16 / 32
19. Wersjonowanie asemblacji Silne nazwy
Podpisywanie asemblacji
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #6 17 / 32
21. Wersjonowanie asemblacji Silne nazwy
Bezpieczne przechowywanie kluczy prywatnych
Bezpieczenstwo najwazniejsze — trzymanie „pod kluczem”
Jak budowac bez klucza prywatnego?
Jak tworzyc aplikacje wykorzystujace (nie)podpisane asemblacje?
Rozwiazanie
delay signing
klucz publiczny — tak, podpis — nie
mozliwosc instalowania w GAC i odwołania
nie mozna uruchamiac
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #6 19 / 32
22. Wersjonowanie asemblacji Silne nazwy
Bezpieczne przechowywanie kluczy prywatnych
Bezpieczenstwo najwazniejsze — trzymanie „pod kluczem”
Jak budowac bez klucza prywatnego?
Jak tworzyc aplikacje wykorzystujace (nie)podpisane asemblacje?
Rozwiazanie
delay signing
klucz publiczny — tak, podpis — nie
mozliwosc instalowania w GAC i odwołania
nie mozna uruchamiac
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #6 19 / 32
23. Wersjonowanie asemblacji Silne nazwy
Reguły kompatybilnosci
nazwy prywatne współdzielone
przyjazne wstecznie komp. niemozliwe
silne po nr wersji po nr wersji
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #6 20 / 32
24. Wersjonowanie asemblacji Polityka kompatybilnosci
Własna polityka kompatybilnosci
Nadpisywanie domyslnej polityki .NET
Polityka dla pojedynczej aplikacji
Polityka globalna (dla wszystkich aplikacji)
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #6 21 / 32
25. Wersjonowanie asemblacji Polityka kompatybilnosci
Polityka kompatybilnosci dla aplikacji
<application name>.config
1 <? xml v e r s i o n=” 1 . 0 ” ?>
2 <c o n f i g u r a t i o n>
3 <runt ime>
4 <a s s emb l yBi n d i n g xmlns=” urn: schemas−mi c r o s o f t−com:asm . v1 ”>
5 <dependentAssembly>
6 <a s s emb l y I d e n t i t y name=”MyCl a s sLi b r a r y ”
7 publicKeyToken=” 229049078753819 b” />
8 <p u b l i s h e r P o l i c y a p p l y=” y e s ”/>
9 <b i n d i n gRe d i r e c t o l dVe r s i o n=” 2 . 0 . 0 . 0 ” newVers ion=” 2 . 1 . 0 . 0 ”
/>
10 <b i n d i n gRe d i r e c t o l dVe r s i o n=” 1 . 1 . 0 . 0 −1 . 3 . 0 . 0 ” newVers ion=”
2 . 1 . 0 . 0 ” />
11 <codeBase v e r s i o n=” 3 . 2 . 1 . 0 ” h r e f=” f i l e : /// c : ntempnSomeApp”
/>
12 </ dependentAssembly>
13 </ a s s emb l yBi n d i n g>
14 </ runt ime>
15 </ c o n f i g u r a t i o n>
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #6 22 / 32
26. Wersjonowanie w VisualStudio
Plan wykładu
1 Wersjonowanie asemblacji
Numer wersji
Modele wdrazania
Silne nazwy
Polityka kompatybilnosci
2 Wersjonowanie w VisualStudio
3 Wersjonowanie CLR
4 Podsumowanie
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #6 23 / 32
27. Wersjonowanie w VisualStudio
Praca z VisualStudio
Miejsce przechowywania
Prywatne kopie asemblacji
Copy Local7! False
Referencja do wersji
Domyslne podazanie za wersja
Specific version7! True
Wersja pliku
SolutionInfo.cs
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #6 24 / 32
28. Wersjonowanie CLR
Plan wykładu
1 Wersjonowanie asemblacji
Numer wersji
Modele wdrazania
Silne nazwy
Polityka kompatybilnosci
2 Wersjonowanie w VisualStudio
3 Wersjonowanie CLR
4 Podsumowanie
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #6 25 / 32
29. Wersjonowanie CLR
Wersje CLR
Scisła zgodnosc wersji ze srodowiskiem .NET
silne nazwy
Polityka wersjonowania .NET
okreslenie kompatybilnosci miedzy wersjami
duza uwaga do wstecznej kompatybilnosci
Wiele asemblacji o tej samej wersji
Unifikacja wersji
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #6 26 / 32
30. Wersjonowanie CLR
Okreslanie wersji CLR
Domyslnie najnowsza na maszynie
taka, która potrafi obsłuzyc VisualStudio
Wszystkie nowe wersje sa kompatybilne wstecznie
Czesciowa kompatybilnosc w przód
zachowanie wersji metadanych
Samodzielne definiowanie kompatybilnosci
supportedRuntime
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #6 27 / 32
32. Podsumowanie
Plan wykładu
1 Wersjonowanie asemblacji
Numer wersji
Modele wdrazania
Silne nazwy
Polityka kompatybilnosci
2 Wersjonowanie w VisualStudio
3 Wersjonowanie CLR
4 Podsumowanie
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #6 29 / 32
33. Podsumowanie
Podsumowanie
Potezny mechanizm wersjonowania i zapewniania zgodnosci
Rózne metody zarzadzania wersjami
Wsparcie w narzedziach (VisualStudio i polecenia)
Mozliwe własne polityki kompatybilnosci
Polityka kompatybilnosci CLR
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #6 30 / 32
34. Podsumowanie
Do domu
Przeczytac rozdział 5. „Programming .NET Components”
Przyswoic modele wdrozen i polityki kompatybilnosci
Przypomniec/zapoznac sie z tworzeniem GUI w WPF
Stworzyc panel kontrolny w WPF
Zapoznac sie z jednym z dedykowanych kontenerów DI
Ninject
Unity
AutoFac
. . .
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #6 31 / 32