6. kompilaty (podzespoły). W środowisku .NET kompilat przybiera fizyczną formę pliku .exe (nazywanego kompilatem procesu) lub pliku .dli (nazywanego kompilatem biblioteki). Struktura kompilatu:
Metadane kompilatu - Opisują kompilat i jego zawartość
Metadane typów - Definiują wszystkie typy i metody eksportowane przez kompilat (jest w module)
Kod IL - Zawiera kod języka IL przygotowany przez kompilator (jest w module)
Zasoby - Zawierają ikony, obrazki, ciągi znaków i inne zasoby
Zawartość kompilatu można sprawdzić używając deasemblera MSIL (programu ildasm.exe). Najważniejszym składnikiem kompilatu jest MANIFEST, będący częścią metadanych kompilatu. MANIFEST zawiera: Nazwę, wersję, klucz publiczny kompilatu; Pliki składające się na kompilat; Kompilaty niezbędne do pracy danego kompilatu; Zbioiy uprawnień; Eksportowane typy.
Kompilaty więloplikowę - zalety:
• Ułatwienie pracy nad testami w zespołach programistów
• Podzielenie dużego projektu na wiele kompilatów pozwala załadować do pamięci tylko te biblioteki .dli, które w danym momencie są potrzebne
• Ułatwienia przy aktualizacji programu (podmienia się tylko te biblioteki, które tego wymagają)
I woizeiiie kompilaUi bibliotecznego:
Tworzymy nowy projekt jako Class Library, piszemy treść metody, W oknie Solution Explorer, klikamy prawym klawiszem myszy na nazwie projektu i wybieramy opcję Build. Po jej wykonaniu zostanie utworzony w folderze bin\Debug plik .dli.
Następnie do aktualnego rozwiązania dodajemy nowy projekt Windows Form (File/Add/New Project).
W opcji Project / Add Reference utworzona biblioteka .dli jest widoczna. Wybieramy ten kompilat i klikamy OK.
Piszemy kod wykorzystujący dany kompilat. Jeśli zatrzymamy uruchomienie programu na linii wywołującej metodę kompiltau, to można zaobserwować, że przed uruchomieniem (opcja Debug/ Windows/ Moduł es) nie ma jeszcze załadowanej biblioteki. Ładuje się dopiero podczas wykonania linii wywołującej daną metodę. Tworzenie modułu;
W Visual Studio Command Prompt piszemy komendę esc /target module /outiMathTools l.netmodule Class l.cs. Po jej wykonaniu zostanie utworzony moduł - plik MathToolsl.netmodule.
Łączenie modułów w kompilat: esc /targetilibrary /addmodule modl.netmodule /addmodule:mod2netmodule out moduły dli Przęstrzęmę nazw ą kompilaty:
• Klasy należące do określonej przestrzeni nazw mogą znajdować się w różnych kompilatach
• Jeden kompilat może zawierać kilka przestrzeni nazw
• Kompilatów można używać niezależnie od języka programowania, za pomocą którego zostały utworzone GAC. W środowisku .NET biblioteki współdzielone są przechowywane są w globalnej składnicy kompilatów (GAC - Global Assembly Cache). Poza tym każdy kompilat musi otrzymać mocną nazwę, która będzie go jednoznacznie identyfikować.
Mocna nazwa kompilatu składa się z: nazwy kompilatu, numem wersji, klucza publicznego, danych kulturowych.
Zalety GAG
• Bezpieczeństwo. Kompilaty w GAC muszą być podpisane za pomocą klucza szyfrującego.
• Kontrola wersji. W GAC może znajdować się wiele wersji tego samego kompilatu, dzięki czemu każda aplikacja może odszukać i użyć tej wersji, do której została dopasowana (w ten sposób unikamy piekła DLL).
• Szybsze ładowanie. Kompilaty są kontrolowane przy wprowadzaniu do GAC, zatem nie ma konieczności ponownego kontrolowania bibliotek ładowanych z GAC
Składnica GAC znajduje się w katalogu G\YVindows\assembly.
7. Udostępnianie oprogramowania. Kod -> Standardy - Bezpieczeństwo - Instalacja -> Kod udostępniany Standardy programowania - Narzędzie FxCop analizuje kod pod kątem tych reguł, które mają służyć jako wskazówki do pisania kodu na platformie .NET. Komenda: FxCopCmd.exe /file:Program.exe /out:plik.txt. Po jej wykonaniu zostanie utworzony plik tekstowy w formacie xml. Przykładowy wynik analizy:
• Zestaw powinien być podpisany za pomocą silnej nazwy, która stanowi klucz identyfikujący zestaw.
• Sugestia dodania atrybutu określającego wersję: [assembly: AssemblyVersion(„l.0.0.0”)].
• Informacje o nieużywanych parametrach Tworzenie silnej nazwy
Pierwszy etap tworzenia silnej (mocnej) nazwy to utworzenie pary kluczy: publicznego i prywatnego.
W czasie kompilacji klucz prywatny służy do szyfrowania plików.