Складання, що динамічно завантажуються.

C# --- Складання .NET --- Складання, що динамічно завантажується

При пошуку зовнішніх збірок, на які посилається поточне складання, CLR-середовище заглядає в маніфест складання. У багатьох випадках необхідно, щоб збирання могли завантажуватися на льоту програмно, навіть якщо в маніфесті про них не згадується. Формально процес завантаження зовнішніх збірок на вимогу називається динамічним завантаженням.

У просторі імен System.Reflection поставляється клас на ім'я Assembly, із застосуванням якого можна динамічно завантажувати збірку, а також переглядати її власні властивості. Цей клас дозволяє виконувати динамічне завантаження приватних і поділюваних збірок, причому перебувають у довільних місцях. По суті, клас Assembly надає методи (зокрема, Load() та LoadFrom(), які дозволяють програмно постачати ту саму інформацію, яка зустрічається у клієнтських файлах *.config).

Щоб подивитися, як забезпечувати динамічне завантаження на практиці, створимо новий проект типу ConsoleApplication. Визначимо в ньому метод Main(), який вимагатиме у користувача дружнє ім'я збірки для динамічного завантаження. Крім того, забезпечимо передачу посилання на цю збірку допоміжному методу, який виводитиме імена всіх класів, інтерфейсів, структур, перерахувань і делегатів, що містяться в збірці. Необхідний код виглядає напрочуд просто:

Зверніть увагу, що статичному методу Assembly.Load() передається лише дружнє ім'я складання, яке потрібно завантажити на згадку. Отже, щоб піддати рефлексії складання fontinfo.dll за допомогою цієї програми, потрібно спочатку скопіювати двійковий файл fontinfo.dll в підкаталог bin\Debug всередині каталогу програми.

Щоб зробити програму більш гнучкою, можна модифікуватикод так, щоб завантаження зовнішньої збірки проводилося за допомогою методу Assembly.LoadFrom(), а не Assembly.Load():

Після цього користувач зможе вводити абсолютний шлях до збірки, що цікавить:

завантаження

Метод Assembly.Load() має кілька перевантажених версій. Одна з них дозволяє вказати значення культури (для локалізованих збірок), а також номер версії та значення маркера відкритого ключа (для збірок, що розділяються). Всі разом ці елементи, які ідентифікують складання, називаютьсявідображуваним ім'ям (display name), формат якого виглядає так: спочатку йде дружнє ім'я складання, за нею рядок розділених комами пар "ім'я/значення", а потім необов'язкові специфікатори (У будь-якому порядку). Нижче наведено зразок, яким слід користуватися (необов'язкові елементи вказані у круглих дужках):

При створенні імені, що відображається, використання PublicKeyToken=null означає, що зв'язування та зіставлення має виконуватися зі збіркою, що не має строгого імені, a Culture="" — що зіставлення має виконуватися з використанням культури, яка прийнята на цільовій машині за умовчанням: