Динамически загружаемые сборки. Класс 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. Способы получения информации о типе
- Примеры получения информации о методах, интерфейсах, классах, структурах, перечислениях, делегатах, полях типов, статистических данных о типах