Динамічно завантажувані збірки. Клас Assembly. Методи Load() та LoadFrom()
Зміст
- 1. Яким чином можна підключити збірку до програми?
- 2. В чому полягає суть динамічного завантаження збірок у програмі?
- 3. Призначення класу System.Assembly. Методи Load() та LoadFrom()
- 4. Приклад динамічного завантаження та використання зовнішньої приватної (private) збірки. Метод Load()
- Зв’язані теми
Пошук на інших ресурсах:
1. Яким чином можна підключити збірку до програми?
До програми зовнішню збірку можна підключити двома способами:
- статичним шляхом з допомогою спеціальних засобів Microsoft Visual Studio. Це здійснюється, наприклад, командами “Add Reference…” або “Add Service Reference…”. У цьому випадку, у маніфесті збірки міститься відповідна інформація про зовнішню збірку, яка була підключена;
- динамічно, з використанням засобів класу Assembly що розміщується в просторі імен System.Reflection. У цьому випадку, інформація про зовнішню збірку не міститься в маніфесті поточної збірки. Ця інформація отримується “на льоту”, тобто динамічно. Існує ряд задач, в яких інформація про збірку в програмі повинна отримуватись динамічно.
⇑
2. В чому полягає суть динамічного завантаження збірок у програмі?
Програма, яка розміщується в деякій збірці, може підключати інші збірки для того, щоб використовувати їх можливості (класи, інтерфейси, методи і т.д.). Динамічне завантаження збірки – це процес завантаження та отримання інформації про зовнішні збірки за вимогою по ходу виконання програми. При динамічному завантаженні зовнішньої збірки в маніфесті немає інформації про цю збірку. Інформація отримується програмно.
⇑
3. Призначення класу System.Assembly. Методи Load() та LoadFrom()
Клас System.Assembly містить засоби для динамічного завантаження збірок та перегляду їх властивостей. Клас System.Assembly розміщується в просторі імен System.Reflection. Для того, щоб використовувати засоби класу System.Assembly потрібно на початку модуля програми набрати такий код
using System.Reflection;
Щоб завантажити збірку, потрібно викликати один з методів:
- метод Load() для приватних (private) збірок. Приватні збірки розміщуються в тому самому каталозі, що і програма, яка їх використовує (досліджує). У цьому випадку задається скорочене ім’я збірки;
- метод LoadFrom() для розділюваних (shared) збірок. Розділювані збірки є бібліотеками, які можуть використовуватись різними додатками на одному й тому ж комп’ютері. Розділювані збірки розгортаються у спеціальному каталозі GAC (Global Assembly Cache).
⇑
4. Приклад динамічного завантаження та використання зовнішньої приватної (private) збірки. Метод Load()
У прикладі розглядаються деякі операції, що визначають інформацію про збірку mscorlib.dll. За даним зразком можна отримувати інформацію про власні розроблені збірки, які зберігаються у *.dll файлах.
Нижче приводиться текст методу GetAssemblyInfo(), який:
- використовує метод Assembly.Load() для створення об’єкту, що містить інформацію про збірку mscorlib.dll;
- в демонстраційних цілях отримує та виводить на екран усі типи, що є у збірці з допомогою методу GetTypes();
- в демонстраційних цілях отримує інформацію про конкретний клас System.Math, який реалізовано у збірці mscorlib.dll.
Виводяться назви методів класу System.Math.
// метод, що демонструє отримання інформації зі збірки mscorlib.dll static void GetAssemblyInfo() { // взяти перелік імен типів збірки mscorlib.dll Assembly asm; asm = Assembly.Load("mscorlib.dll"); // замість цієї можна вказати власну збірку // взяти повне ім'я збірки string FullName = asm.FullName; // Full Name = mscorlib, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = b77a5c561934e089 // взяти перелік імен у збірці Type[] types = asm.GetTypes(); // отримати усі типи, що є у збірці // вивести назви усіх типів збірки на екран foreach (Type t in types) { Console.WriteLine("Type: {0}", t.FullName); } // отримати інформацію про конкретний тип Type tp = asm.GetType("System.Math"); // тип System.Math MethodInfo[] methods = tp.GetMethods(); // отримати інформацію про методи System.Math // вивести перелік методів System.Math на екран foreach (MethodInfo mi in methods) { Console.WriteLine(mi.Name); // вивести тільки імена методів } }
Більш детальні приклади програмного коду про визначення необхідної інформації заданого типу описуються в темі:
⇑
Зв’язані теми
- Динамічна ідентифікація типів. Оператори is, as. Приклади
- Рефлексія типів. Отримання метаданих типу. Простір імен System.Reflection. Клас System.Type. Способи отримання інформації про тип
- Приклади отримання інформації про методи, інтерфейси, класи, структури, зчислення, делегати, поля типів, параметри методів, статистичні дані про типи