SlideShare a Scribd company logo
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #6 1 / 32
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
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
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
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
Wersjonowanie asemblacji 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #6 6 / 32
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
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
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
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
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
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
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
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
Wersjonowanie asemblacji Silne nazwy 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #6 13 / 32
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
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
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
Wersjonowanie asemblacji Silne nazwy 
Podpisywanie asemblacji 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #6 17 / 32
Wersjonowanie asemblacji Silne nazwy 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #6 18 / 32
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
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
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
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
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
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
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
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
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
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
Wersjonowanie CLR 
Kompatybilnosc wersji CLR 
CLR 1.0 1.1 2.0 3.0 3.5 4.0 4.5 
1.0 + + + + + + + 
1.1 + + + + + + + 
2.0 - - + + + + + 
3.0 - - - + + + + 
3.5 - - - + + + + 
4.0 - - - - - + + 
4.5 - - - - - + + 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #6 28 / 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
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
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
Podsumowanie 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #6 32 / 32

More Related Content

PPTX
Wersjonowanie kodu. Dobre praktyki na przykładzie przejścia z CVS na GITa
PDF
Symfony Flex - Nowe, efektywne podejście do budowania aplikacji w Symfony
PDF
Wprowadzenie do testów wydajnościowych w k6
PDF
Szybkie stawianie aplikacji z Elastic Beanstalk
PDF
Websockety w PHP
PDF
Porażka nie wchodzi w grę, czyli o niezawodności
PDF
[QE 2017] Adrian Gonciarz - Tester w Kontenerze, czyli jak Docker może pomóc ...
PPTX
Ciągłe Dostarcznie - Wprowadzenie
Wersjonowanie kodu. Dobre praktyki na przykładzie przejścia z CVS na GITa
Symfony Flex - Nowe, efektywne podejście do budowania aplikacji w Symfony
Wprowadzenie do testów wydajnościowych w k6
Szybkie stawianie aplikacji z Elastic Beanstalk
Websockety w PHP
Porażka nie wchodzi w grę, czyli o niezawodności
[QE 2017] Adrian Gonciarz - Tester w Kontenerze, czyli jak Docker może pomóc ...
Ciągłe Dostarcznie - Wprowadzenie

What's hot (6)

PDF
Testowanie rozwiązań serverless z LocalStack
PDF
“Dziesięć serwerów poproszę!“, czyli co może Ci zaoferować definiowanie infra...
PPTX
WEBINAR 3 # Pierwszy test automatyczny
PDF
Programowanie Komponentowe: #C Wprowadzenie do OSGi
PDF
Kivy na Androidzie
PDF
Wielomodułowe aplikacje korzystające ze wspólnej bazy kodu [PL]
Testowanie rozwiązań serverless z LocalStack
“Dziesięć serwerów poproszę!“, czyli co może Ci zaoferować definiowanie infra...
WEBINAR 3 # Pierwszy test automatyczny
Programowanie Komponentowe: #C Wprowadzenie do OSGi
Kivy na Androidzie
Wielomodułowe aplikacje korzystające ze wspólnej bazy kodu [PL]
Ad

Viewers also liked (16)

PDF
Programowanie Komponentowe: #E Podsumowanie
PDF
Programowanie Komponentowe: #7 Programowanie asynchroniczne i sterowane zdarz...
PDF
Parallel quicksort cz. 2
PDF
Programowanie Komponentowe: #D Model komponentowy OSGi
PDF
Optoelektroniczne modelowanie sieci neuronowej cz. 1
PDF
Programowanie Komponentowe: #9 Java Beans
PDF
Materiały fotorefrakcyjne
PDF
Programowanie Komponentowe: #A Wprowadzenie do Springa
PDF
Programowanie Komponentowe: #B Komponentowe aspekty springa
PDF
The metadata driven e-laboratory web client
PDF
Kwantowe struktury półprzewodnikowe
PDF
Optyczne solitony przestrzenne
PDF
Programowanie Komponentowe: #1 Wprowadzenie
PPTX
Architektura heksagonalna
PDF
Lokalne sieci światłowodowe
PDF
Optyka ciekłych kryształów
Programowanie Komponentowe: #E Podsumowanie
Programowanie Komponentowe: #7 Programowanie asynchroniczne i sterowane zdarz...
Parallel quicksort cz. 2
Programowanie Komponentowe: #D Model komponentowy OSGi
Optoelektroniczne modelowanie sieci neuronowej cz. 1
Programowanie Komponentowe: #9 Java Beans
Materiały fotorefrakcyjne
Programowanie Komponentowe: #A Wprowadzenie do Springa
Programowanie Komponentowe: #B Komponentowe aspekty springa
The metadata driven e-laboratory web client
Kwantowe struktury półprzewodnikowe
Optyczne solitony przestrzenne
Programowanie Komponentowe: #1 Wprowadzenie
Architektura heksagonalna
Lokalne sieci światłowodowe
Optyka ciekłych kryształów
Ad

Similar to Programowanie Komponentowe: #6 Wersjonowanie (9)

PDF
Programowanie Komponentowe: #5 Wprowadzenie do środowiska .NET
PDF
Win32ASM. Asembler w Windows
PDF
Delphi 2005. 303 gotowe rozwiązania
PDF
Asembler. Podręcznik programisty
PDF
Erlang @ SFI 2014
PDF
Programowanie Komponentowe: #3 Podstawy programowania komponentów
PDF
Nowoczesny obiektowy Pascal (1) - kurs BSC
PDF
Programowanie Komponentowe: #2 Metody opisu komponentów
PDF
ABC Delphi 2006
Programowanie Komponentowe: #5 Wprowadzenie do środowiska .NET
Win32ASM. Asembler w Windows
Delphi 2005. 303 gotowe rozwiązania
Asembler. Podręcznik programisty
Erlang @ SFI 2014
Programowanie Komponentowe: #3 Podstawy programowania komponentów
Nowoczesny obiektowy Pascal (1) - kurs BSC
Programowanie Komponentowe: #2 Metody opisu komponentów
ABC Delphi 2006

More from Mikołaj Olszewski (11)

PDF
Optoelektroniczne sieci neuronowe
PDF
Swiatłowodowy czujnik prądu
PDF
Metody efektywnego łączenia sieci neuronowych
PDF
Parallel quicksort cz. 1
PDF
Maszyna Turinga
PDF
Planowanie działań cz. 2
PDF
Planowanie działań cz. 1
PDF
Model hierarchiczny
PDF
Komputer genetyczny
PDF
Test wyszukiwarek internetowych
PDF
Programowanie komponentowe: #4 Podstawy połączeń komponentów
Optoelektroniczne sieci neuronowe
Swiatłowodowy czujnik prądu
Metody efektywnego łączenia sieci neuronowych
Parallel quicksort cz. 1
Maszyna Turinga
Planowanie działań cz. 2
Planowanie działań cz. 1
Model hierarchiczny
Komputer genetyczny
Test wyszukiwarek internetowych
Programowanie komponentowe: #4 Podstawy połączeń komponentów

Programowanie Komponentowe: #6 Wersjonowanie

  • 1. Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #6 1 / 32
  • 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
  • 6. Wersjonowanie asemblacji Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #6 6 / 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
  • 15. Wersjonowanie asemblacji Silne nazwy Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #6 13 / 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
  • 20. Wersjonowanie asemblacji Silne nazwy Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #6 18 / 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
  • 31. Wersjonowanie CLR Kompatybilnosc wersji CLR CLR 1.0 1.1 2.0 3.0 3.5 4.0 4.5 1.0 + + + + + + + 1.1 + + + + + + + 2.0 - - + + + + + 3.0 - - - + + + + 3.5 - - - + + + + 4.0 - - - - - + + 4.5 - - - - - + + Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #6 28 / 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
  • 35. Podsumowanie Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #6 32 / 32