Динамично заредени сборки

C# --- .NET Асембли --- Динамично заредени Асембли

Когато търсите външни сглобки, посочени от текущата сглобка, времето за изпълнение на общ език разглежда манифеста на сглобката. В много случаи е необходимо сглобките да могат да се зареждат програмно в движение, дори ако не са споменати в манифеста. Формално, процесът на зареждане на външни модули при поискване се наричадинамично зареждане.

Пространството от имена System.Reflection предоставя клас, наречен Assembly, който може да се използва за динамично зареждане на асембли, както и за преглед на нейните собствени свойства. Този клас ви позволява динамично да зареждате частни и споделени сборки, както и тези, разположени на произволни места. По същество класът Assembly предоставя методи (по-специално Load() и LoadFrom()), които ви позволяват програмно да предоставяте същата информация, която се намира в клиентските *.config файлове.

За да видим как работи динамичното зареждане на практика, нека създадем нов проект от тип ConsoleApplication. Нека дефинираме метода Main() в него, който ще подкани потребителя за приятелско име на сборка за динамично зареждане. В допълнение, ние ще гарантираме, че препратката към този асембли се предава на помощен метод, който ще покаже имената на всички класове, интерфейси, структури, изброявания и делегати, съдържащи се в асемблирането. Необходимият код изглежда изненадващо прост:

Обърнете внимание, че само приятелското име на сборката, която трябва да бъде заредена в паметта, се предава на статичния метод Assembly.Load(). Следователно, за да отразите изграждането на fontinfo.dll с тази програма, първо трябва да копирате двоичния fontinfo.dll в поддиректорията bin\Debug в директорията на приложението.

За да направите приложението по-гъвкаво, можете да променитекод, така че външното сглобяване да се зарежда с помощта на метода Assembly.LoadFrom(), а не Assembly.Load():

След това потребителят ще може да въведе абсолютния път до интересния сбор:

заредени

Методът Assembly.Load() има няколко претоварвания. Един от тях ви позволява да посочите стойност на култура (за локализируеми сглобки) и номер на версия и стойност на токен на публичен ключ (за споделени сглобки). Заедно тези елементи, които идентифицират сглобка, се наричат ​​показвано име, чийто формат е както следва: първо разбираемото име на сглобката, последвано от низ от двойки име/стойност, разделени със запетая, и след това незадължителните спецификатори (в произволен ред). Следното е пример за използване (незадължителните елементи са в скоби):

Когато създавате екранно име, използването на PublicKeyToken=null означава, че обвързването и съпоставянето трябва да се извърши с асембли, което няма силно име, и Culture="", че съпоставянето трябва да се извърши с помощта на културата по подразбиране на целевата машина: