Выбери любимый жанр
Выбрать книгу по жанру
Фантастика и фэнтези
- Боевая фантастика
- Героическая фантастика
- Городское фэнтези
- Готический роман
- Детективная фантастика
- Ироническая фантастика
- Ироническое фэнтези
- Историческое фэнтези
- Киберпанк
- Космическая фантастика
- Космоопера
- ЛитРПГ
- Мистика
- Научная фантастика
- Ненаучная фантастика
- Попаданцы
- Постапокалипсис
- Сказочная фантастика
- Социально-философская фантастика
- Стимпанк
- Технофэнтези
- Ужасы и мистика
- Фантастика: прочее
- Фэнтези
- Эпическая фантастика
- Юмористическая фантастика
- Юмористическое фэнтези
- Альтернативная история
Детективы и триллеры
- Боевики
- Дамский детективный роман
- Иронические детективы
- Исторические детективы
- Классические детективы
- Криминальные детективы
- Крутой детектив
- Маньяки
- Медицинский триллер
- Политические детективы
- Полицейские детективы
- Прочие Детективы
- Триллеры
- Шпионские детективы
Проза
- Афоризмы
- Военная проза
- Историческая проза
- Классическая проза
- Контркультура
- Магический реализм
- Новелла
- Повесть
- Проза прочее
- Рассказ
- Роман
- Русская классическая проза
- Семейный роман/Семейная сага
- Сентиментальная проза
- Советская классическая проза
- Современная проза
- Эпистолярная проза
- Эссе, очерк, этюд, набросок
- Феерия
Любовные романы
- Исторические любовные романы
- Короткие любовные романы
- Любовно-фантастические романы
- Остросюжетные любовные романы
- Порно
- Прочие любовные романы
- Слеш
- Современные любовные романы
- Эротика
- Фемслеш
Приключения
- Вестерны
- Исторические приключения
- Морские приключения
- Приключения про индейцев
- Природа и животные
- Прочие приключения
- Путешествия и география
Детские
- Детская образовательная литература
- Детская проза
- Детская фантастика
- Детские остросюжетные
- Детские приключения
- Детские стихи
- Детский фольклор
- Книга-игра
- Прочая детская литература
- Сказки
Поэзия и драматургия
- Басни
- Верлибры
- Визуальная поэзия
- В стихах
- Драматургия
- Лирика
- Палиндромы
- Песенная поэзия
- Поэзия
- Экспериментальная поэзия
- Эпическая поэзия
Старинная литература
- Античная литература
- Древневосточная литература
- Древнерусская литература
- Европейская старинная литература
- Мифы. Легенды. Эпос
- Прочая старинная литература
Научно-образовательная
- Альтернативная медицина
- Астрономия и космос
- Биология
- Биофизика
- Биохимия
- Ботаника
- Ветеринария
- Военная история
- Геология и география
- Государство и право
- Детская психология
- Зоология
- Иностранные языки
- История
- Культурология
- Литературоведение
- Математика
- Медицина
- Обществознание
- Органическая химия
- Педагогика
- Политика
- Прочая научная литература
- Психология
- Психотерапия и консультирование
- Религиоведение
- Рефераты
- Секс и семейная психология
- Технические науки
- Учебники
- Физика
- Физическая химия
- Философия
- Химия
- Шпаргалки
- Экология
- Юриспруденция
- Языкознание
- Аналитическая химия
Компьютеры и интернет
- Базы данных
- Интернет
- Компьютерное «железо»
- ОС и сети
- Программирование
- Программное обеспечение
- Прочая компьютерная литература
Справочная литература
Документальная литература
- Биографии и мемуары
- Военная документалистика
- Искусство и Дизайн
- Критика
- Научпоп
- Прочая документальная литература
- Публицистика
Религия и духовность
- Астрология
- Индуизм
- Православие
- Протестантизм
- Прочая религиозная литература
- Религия
- Самосовершенствование
- Христианство
- Эзотерика
- Язычество
- Хиромантия
Юмор
Дом и семья
- Домашние животные
- Здоровье и красота
- Кулинария
- Прочее домоводство
- Развлечения
- Сад и огород
- Сделай сам
- Спорт
- Хобби и ремесла
- Эротика и секс
Деловая литература
- Банковское дело
- Внешнеэкономическая деятельность
- Деловая литература
- Делопроизводство
- Корпоративная культура
- Личные финансы
- Малый бизнес
- Маркетинг, PR, реклама
- О бизнесе популярно
- Поиск работы, карьера
- Торговля
- Управление, подбор персонала
- Ценные бумаги, инвестиции
- Экономика
Жанр не определен
Техника
Прочее
Драматургия
Фольклор
Военное дело
Последние комментарии
оксана2018-11-27
Вообще, я больше люблю новинки литератур
К книгеЯзык программирования C#9 и платформа .NET5 - Троелсен Эндрю - Страница 324
324
Изменить размер шрифта:
using System;
using System.Reflection;
using System.IO; // Для определения FileNotFoundException.
Console.WriteLine("***** External Assembly Viewer *****");
string asmName = "";
Assembly asm = null;
do
{
Console.WriteLine("\nEnter an assembly to evaluate");
// Пригласить ввести имя сборки.
Console.Write("or enter Q to quit: "); // или Q для завершения
// Получить имя сборки.
asmName = Console.ReadLine();
// Пользователь желает завершить программу?
if (asmName.Equals("Q",StringComparison.OrdinalIgnoreCase))
{
break;
}
// Попробовать загрузить сборку.
try
{
asm = Assembly.LoadFrom(asmName);
DisplayTypesInAsm(asm);
}
catch
{
Console.WriteLine("Sorry, can't find assembly.");
// Сборка не найдена.
}
} while (true);
static void DisplayTypesInAsm(Assembly asm)
{
Console.WriteLine("\n***** Types in Assembly *****");
Console.WriteLine("->{0}", asm.FullName);
Type[] types = asm.GetTypes();
foreach (Type t in types)
{
Console.WriteLine("Type: {0}", t);
}
Console.WriteLine("");
}
Если вы хотите проводить рефлексию по
CarLibrary.dll
, тогда перед запуском приложения ExternalAssemblyReflector
понадобится скопировать двоичный файл CarLibrary.dll
(из предыдущей главы ) в каталог проекта (в случае применения Visual Studio Code) или в каталог \bin\Debug\net5.0
самого приложения (в случае использования Visual Studio). После выдачи запроса введите CarLibrary
(расширение необязательно); вывод будет выглядеть примерно так:***** External Assembly Viewer *****
Enter an assembly to evaluate
(window.adrunTag = window.adrunTag || []).push({v: 1, el: 'adrun-4-390', c: 4, b: 390})or enter Q to quit: CarLibrary
***** Types in Assembly *****
->CarLibrary, Version=1.0.0.1, Culture=neutral, PublicKeyToken=null
Type: CarLibrary.MyInternalClass
Type: CarLibrary.EngineStateEnum
Type: CarLibrary.MusicMedia
Type: CarLibrary.Car
Type: CarLibrary.MiniVan
Type: CarLibrary.SportsCar
Метод
LoadFrom()
также может принимать абсолютный путь к файлу сборки, которую нужно просмотреть (скажем, С:\MyApp\MyAsm.dll
). Благодаря этому методу вы можете передавать полный путь в своем проекте консольного приложения. Таким образом, если файл CarLibrary.dll
находится в каталоге С:\MyCode
, тогда вы можете ввести С:\MyCode\CarLibrary
(обратите внимание, что расширение необязательно). Рефлексия сборок инфраструктуры
Метод
Assembly.Load()
имеет несколько перегруженных версий. Одна из них разрешает указывать значение культуры (для локализованных сборок), а также номер версии и значение маркера открытого ключа (для сборок инфраструктуры). Коллективно многочисленные элементы, идентифицирующие сборку, называются отображаемым именем. Форматом отображаемого имени является строка пар "имя-значение", разделенных запятыми, которая начинается с дружественного имени сборки, а за ним следуют необязательные квалификаторы (в любом порядке). Вот как выглядит шаблон (необязательные элементы указаны в круглых скобках):Имя (,Version = <старший номер>.<младший номер>.<номер сборки>.сномер редакции>)
(,Culture = <маркер культуры>) (,PublicKeyToken = <маркер открытого ключа>)
При создании отображаемого имени соглашение
PublicKeyToken=null
отражает тот факт, что требуется связывание и сопоставление со сборкой, не имеющей строгого имени. Вдобавок Culture=""
указывает, что сопоставление должно осуществляться со стандартной культурой целевой машины. Вот пример:// Загрузить версию 1.0.0.0 сборки CarLibrary, используя стандартную культуру
Assembly а = Assembly.Load(
"CarLibrary, Version=l.0.0.0, PublicKeyToken=null, Culture=\"\"" );
// В C# кавычки должны быть отменены с помощью символа обратной косой черты
Кроме того, следует иметь в виду, что пространство имен
System.Reflection
предлагает тип AssemblyName
, который позволяет представлять показанную выше строковую информацию в удобной объектной переменной. Обычно класс AssemblyName
применяется вместе с классом System.Version
, который представляет собой объектно-ориентированную оболочку для номера версии сборки. После создания отображаемого имени его затем можно передавать перегруженной версии метода Assembly.Load()
:- Предыдущая
- 324/642
- Следующая
