12c55cc0d5a96209f9269586803fd50e.ppt
- Количество слайдов: 35
Програмиране за. NET Framework http: //www. nakov. com/dotnet-project/ Асемблита и Deployment Михаил Стойнов Софтуерен инженер, Sciant Inc. www. sciant. com Microsoft Student Consultant www. fmi. uni-sofia. bg/microsoft/
Необходими знания u u Базови познания за. NET Framework и CLR (Common Language Runtime) Базови познания за общата система от типове в. NET (Common Type System – CTS) Познания за езика C# Познаване на инструментите от. NET Framework SDK
Съдържание u u u u u Какво е асембли? Още за асемблитата Манифест на асембли Идентификация на асембли Атрибути за работа с манифест Силно именуване на асембли Global Assembly Cache (GAC) Модули Търсене на асемблита (probing) Конфигурационни файлове
Какво е асембли? u Съвкупност от файлове, съдържащи: v v v u дефиниции на типове (код) метаданни файлове с ресурси (. bmp, . ico, …) Един от файловете се избира да съдържа т. нар. манифест: v v v Представлява набор от таблици Съдържа имената на файловете, изграждащи асемблито Съдържа версията, културата, издателя и публично експортираните типове
Какво е асембли? u u Асемблито е най-малката deployment единица в. NET Framework Проблемите с версиите (DLL hell) в. NET са решени с добавяне на версия на ниво асембли v u Няколко различни версии на едно и също асембли могат да съществуват и да се използват едновременно Решени са проблемите с трудното инсталиране v XCopy installation
Едно асембли … u . . . съдържа IL код за изпълнение v v u . . . формира security boundary v u Кодът се съдържа в Portable Executable (PE) файл (DLL, EXE) Трябва да има входна точка (entry point) – Dll. Main(), Win. Main() или Main() На ниво асембли се задават и изискват настройки за сигурността . . . формира type boundary v Областта на едно асембли е граница на видимост за типовете, които съдържа
Едно асембли … (2) u . . . формира reference scope boundary v u . . . формира version boundary v u Всички типове и ресурси сменят версията си като едно цяло . . . е единица за споделяне v u Типовете и ресурсите могат да бъдат private за това асембли или да са изложени извън асемблито при споделените асемблита (shared assembly) . . . формира deployment unit
Манифест на асембли u Метаданни, описващи асемблито u Съдържат: v идентификация: v име + версия + култура + собственик (ключ) v списък на всички модули (файлове) v реферирани асемблита v асемблита, от които се нуждае, за да работи v предоставяни типове и ресурси v изисквани права за достъп
Идентификация на асембли u Име на асемблито v u символен низ Версия Съдържа 4 идентификатора разделени с точка: Major. Minor. Build. Revision (напр. 2. 0. 1765. 2) v Използва се от CLR при version policy v u Произход на асемблито v u Публичният ключ на производителя на асемблито (assembly vendor public key) Култура (напр. “en-US”) v RFC 1766 низ, указващ регионални настройки (locale) на асемблито
Демонстрация #1 u Разглеждане на манифеста на асембли с ildasm
Атрибути за работа с манифест u Атрибути, които описват едно асембли: [assembly: [assembly: [assembly: u Assembly. Title("…")] Assembly. Description("…")] Assembly. Configuration("…")] Assembly. Company("…")] Assembly. Product("…")] Assembly. Copyright("…")] Assembly. Trademark("…")] Assembly. Culture("…")] Assembly. Version("1. 0. *")] Assembly. Delay. Sign(false)] Assembly. Key. File("…")] Assembly. Key. Name("…")] VS. NET създава отделен файл за атрибутите, описващи асемблито – Assembly. Info. cs
Силно именуване на асембли u Служи за създаване на уникален идентификатор на едно асембли v v име версия култура хеш на публичния ключ Пример: ["my. Dll, Version=1. 0. 0. 1, Culture=neutral, Public. Key. Token= 9 b 35 aa 32 c 18 d 4 fb 1"] u Само силно именуваните асемблита могат да се публикуват в GAC
Демонстрация #2 u Създаване на силно именувано асембли
Global Assembly Cache (GAC) u Контейнер, в който се инсталират споделени асемблита (shared assemblies) v u u Могат да се използват от всички приложения Възможно е съществуването в GAC на две различни версии на едно асембли Начини за администриране на GAC: v v v gacutil Windows Explorer Shell Extension. NET Configuration Management Console
Инсталиране в GAC u Силно-именуваните асемблита могат да се инсталират в Global Assembly Cache: v Инсталиране и деинсталиране от GAC: gacutil –i My. Assembly. dll gacutil –u My. Assembly u При добавяне на референция от някое асембли (A. dll) към силно-именувано асембли (S. dll): v v Публичният ключ на S. dll се записва в компилираното асембли A. dll Така A. dll се свързва само с конкретната версия на асемблито S. dll
Демонстрация #3 u Работа с GAC (gacutil, shellextension)
Модули u u u Едно асембли може да се състои от няколко файла Всеки един от тях се нарича модул Един от тях съдържа манифеста на асемблито Модулите се зареждат, само ако приложението се нуждае от тях Модули може да са и ресурсни файлове v u jpg, xls, dbf VS. NET компилира едно асембли в един модул (не поддържа много-модулни асемблита)
Модули – пример FUT. cs – често използвани типове namespace Frequently. Used. Types { public class AFrequently. Used. Type { } } RUT. cs – рядко използвани типове namespace Rarely. Used. Types { public class ARarely. Used. Type { } }
Модули – пример RUT. netmodule My. Library. dll IL код, компилиран от RUT. cs IL код, компилиран от FUT. cs Метаданни Типове, методи и т. н. , дефинирани от RUT. cs Типове, методи и т. н. , реферирани от RUT. cs Метаданни Типове, методи и т. н. , дефинирани от FUT. cs Типове, методи и т. н. , реферирани от FUT. cs Манифест Файлове на асемблито (самият той и RUT. netmodule) Публични типове на асемблито (собствени и на RUT. netmodule)
Демонстрация #4 u Създаване на много-модулно асембли
Модули – пример RUT. netmodule My. Library. dll IL код, компилиран от RUT. cs (няма IL код) Метаданни Типове, методи и т. н. , дефинирани от RUT. cs Типове, методи и т. н. , реферирани от RUT. cs Метаданни (никакви дефиниционни или референтни таблици) FUT. netmodule IL код, компилиран от FUT. cs Метаданни Типове, методи и т. н. , дефинирани от FUT. cs Типове, методи и т. н. , реферирани от FUT. cs Манифест Файлове на асемблито (самият той и RUT. netmodule) Публични типове на асемблито (собствени и на RUT. netmodule)
Демонстрация #5 u Създаване на много-модулно асембли чрез инструмента al. exe
Търсене на асембли u Случаи, в които търсим асембли v v u При зареждане на външно слабо именувано асембли (Late Binding) При приложение, използващо много асемблита При зареждане на силно именувано асембли от GAC При зареждане на частно силно именувано асембли Процесът на търсене се нарича probing
Търсене на асемблита (probing) u Търсене на слабо именовано асембли Пътища в v v v конфигурационния файл Пример: Намираме се в Base. Dir Нуждаем се от асемблито My. Assembly Base. DirMy. Assembly. dll Base. Dirprivate. Path 1My. AssemblyMy. Assembly. dll Base. Dirprivate. Path 2My. Assembly. dll (после същите файлове, но с разширение. exe)
Търсене на асемблита (probing) u Ако се нуждаем от асембли, CLR ще го търси на следните места: v Асемблита с инвариантна култура: v текущата директория на приложението v директорията с името на асемблито (Asmb. Name) v частните пътища – пътища за търсене, зададени в конфигурационния файл v във всеки от частните пътища в директория с името на асемблито
Търсене на сателитни асемблита u Сателитни асемблита – асемблита със зададена култура, различна от инвариантната v v v Пример: Намираме се в Base. Dir Нуждаем се от My. Asmb с култура en-US Base. Diren-USMy. Asmb. dll Base. Diren-USprivate. Path 1My. AsmbMy. Asmb. dll Base. Diren-USprivate. Path 2My. Asmb. dll (после същите файлове, но с разширение. exe)
Конфигурационни файлове u u App. exe. config (Web. config) Използват се v v u от администратори за конфигуриране на пътища за сменяне на версии вместо добавяне на записи в регистри Могат да се добавят потребителски дефинирани данни
Демонстрация #6 u Настройка с конфигурационни файлове
Асемблита и Deployment Събудете се! Въпроси? Михаил Стойнов Софтуерен инженер, Sciant Inc. www. sciant. com Microsoft Student Consultant www. fmi. uni-sofia. bg/microsoft/
Упражнения 1. 2. 3. 4. 5. Създайте асембли Student. dll със силно име и задайте в метаданните му следната информация: име "Студент", описание "Студент във ФМИ", култура "bg-BG", версия "0. 0. 0. 1". Подпишете асемблито с частен ключ, който генерирате сами. Инсталирайте асемблито Student. dll в GAC (с Windows Explorer или с използване на gacutil). Деинсталирайте асембли Student. dll от GAC (с Windows Explorer, с използване на gacutil). Създайте модул Student, модул Professor и модул Employee. Обединете ги в асемблито Faculty. dll. Добавете като модул към горе-създаденото асембли Faculty. dll снимка на факултета (има такива на сайта на ФМИ [http: //fmi. uni-sofia. bg]).
Използвана литература u u u Microsoft Quick. Start Tutorials – How Do I. . . Create an assembly with a strong name? – http: //samples. got dotnet. com/quickstart/howto/doc/sharedname. aspx Microsoft Quick. Start Tutorials – MSDN Library, How Do I. . . Create a delay signed shared assembly? – http: //samples. gotdotnet. com/quickstart/howto/doc/del aysign. aspx Microsoft Quick. Start Tutorials – How Do I. . . Work with the global assembly cache? – http: //samples. gotdot net. com/quickstart/howto/doc/gac. aspx Microsoft Quick. Start Tutorials – How Do I. . . Change the search path for private assemblies? – http: //samples. gotdotnet. com/quickstart/howto/doc/searchpath. aspx Microsoft Quick. Start Tutorials – How Do I. . . Use Assembly Version Policy? – http: //samples. gotdotnet. com/quickstart/howto/doc/Version. aspx
Използвана литература u u Microsoft Quick. Start Tutorials – How Do I. . . Create a Publisher Policy Assembly? – http: //samples. gotdotnet. com/quickstart/howto/doc/pubpolicy. aspx MSDN Library, Packaging and Deploying. NET Framework Applications – http: //msdn. microsoft. com/ library/default. asp? url=/library/en-us/cptutorials/html/ packaging_and_deploying__net_framework_applicatio ns. asp MSDN Library, Configuration File Schema – http: //msdn. microsoft. com/library/default. asp? url=/libr ary/en-us/cpgenref/html/ gngrfnetframeworkconfigurationfileschema. asp MSDN Library, Ildasm. exe Tutorial – http: //msdn. microsoft. com/library/default. asp? url=/library/enus/cptutorials/html/il_dasm_tutorial. asp
Използвана литература u u u MSDN Library, . NET Framework Reference Documentation – http: //msdn. microsoft. com/netframe work/support/documentation/default. aspx? pull=/library /en-us/netstart/html/cpframeworkref_start. asp MSDN Library, Glossary – http: //msdn. microsoft. com/ netframework/support/documentation/default. aspx? pul l=/library/en-us/netstart/html/cpframeworkref_start. asp MSDN Library, Assemblies – http: //msdn. microsoft. com/library/default. asp? url=/library/en-us/cpguide/ html/cpconassemblies. asp