Жанры книг
Мы в соц.сетях
ParaKnig📚 » Компьютеры и Интернет » Базы данных » Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю
<< На главную

Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю

Читать онлайн Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю

Шрифт:

-
+

Интервал:

-
+

Закладка:

Сделать
1 ... 320 321 322 323 324 325 326 327 328 ... 642
Перейти на страницу:

using System;

using System.Reflection;

using System.IO; // Для определения FileNotFoundException.

Console.WriteLine(&quot;***** External Assembly Viewer *****&quot;);

string asmName = &quot;&quot;;

Assembly asm = null;

do

{

  Console.WriteLine(&quot;nEnter an assembly to evaluate&quot;);

                    // Пригласить ввести имя сборки.

  Console.Write(&quot;or enter Q to quit: &quot;); // или Q для завершения

  // Получить имя сборки.

  asmName = Console.ReadLine();

  // Пользователь желает завершить программу?

  if (asmName.Equals(&quot;Q&quot;,StringComparison.OrdinalIgnoreCase))

  {

    break;

  }

  // Попробовать загрузить сборку.

  try

  {

    asm = Assembly.LoadFrom(asmName);

    DisplayTypesInAsm(asm);

  }

  catch

  {

    Console.WriteLine(&quot;Sorry, can't find assembly.&quot;);

                 // Сборка не найдена.

  }

} while (true);

static void DisplayTypesInAsm(Assembly asm)

{

  Console.WriteLine(&quot;n***** Types in Assembly *****&quot;);

  Console.WriteLine(&quot;-&gt;{0}&quot;, asm.FullName);

  Type[] types = asm.GetTypes();

  foreach (Type t in types)

  {

    Console.WriteLine(&quot;Type: {0}&quot;, t);

  }

  Console.WriteLine(&quot;&quot;);

}

Если вы хотите проводить рефлексию по CarLibrary.dll, тогда перед запуском приложения ExternalAssemblyReflector понадобится скопировать двоичный файл CarLibrary.dll (из предыдущей главы ) в каталог проекта (в случае применения Visual Studio Code) или в каталог binDebugnet5.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 *****

-&gt;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() также может принимать абсолютный путь к файлу сборки, которую нужно просмотреть (скажем, С:MyAppMyAsm.dll). Благодаря этому методу вы можете передавать полный путь в своем проекте консольного приложения. Таким образом, если файл CarLibrary.dll находится в каталоге С:MyCode, тогда вы можете ввести С:MyCodeCarLibrary (обратите внимание, что расширение необязательно).

Рефлексия сборок инфраструктуры

Метод Assembly.Load() имеет несколько перегруженных версий. Одна из них разрешает указывать значение культуры (для локализованных сборок), а также номер версии и значение маркера открытого ключа (для сборок инфраструктуры). Коллективно многочисленные элементы, идентифицирующие сборку, называются отображаемым именем. Форматом отображаемого имени является строка пар "имя-значение", разделенных запятыми, которая начинается с дружественного имени сборки, а за ним следуют необязательные квалификаторы (в любом порядке). Вот как выглядит шаблон (необязательные элементы указаны в круглых скобках):

Имя (,Version = &lt;старший номер&gt;.&lt;младший номер&gt;.&lt;номер сборки&gt;.сномер редакции&gt;)

(,Culture = &lt;маркер культуры&gt;) (,PublicKeyToken = &lt;маркер открытого ключа&gt;)

При создании отображаемого имени соглашение PublicKeyToken=null отражает тот факт, что требуется связывание и сопоставление со сборкой, не имеющей строгого имени. Вдобавок Culture=&quot;&quot; указывает, что сопоставление должно осуществляться со стандартной культурой целевой машины. Вот пример:

// Загрузить версию 1.0.0.0 сборки CarLibrary, используя стандартную культуру

Assembly а = Assembly.Load(

&quot;CarLibrary, Version=l.0.0.0, PublicKeyToken=null, Culture=&quot;&quot;&quot; );

// В C# кавычки должны быть отменены с помощью символа обратной косой черты

Кроме того, следует иметь в виду, что пространство имен System.Reflection предлагает тип AssemblyName, который позволяет представлять показанную выше строковую информацию в удобной объектной переменной. Обычно класс AssemblyName применяется вместе с классом System.Version, который представляет собой объектно-ориентированную оболочку для номера версии сборки. После создания отображаемого имени его затем можно передавать перегруженной версии метода Assembly.Load():

1 ... 320 321 322 323 324 325 326 327 328 ... 642
Перейти на страницу:
На этой странице вы можете бесплатно читать книгу Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю бесплатно.
Комментарии
Открыть боковую панель
Комментарии
Лариса
Лариса 11.03.2026 - 20:17
Странно,здесь имя девочки Аграфена,а на других сайтах я прослушала три книги этого цикла с именем Дарвина.Зачем менять имя и путать читателей? Опечатка- не Дарвина,  а  Дарина.
Григорий
Григорий 09.04.2025 - 22:24
Лучшая книга всех времен
Женя
Женя 02.04.2025 - 16:08
Любимая книга