Главная » C# » Загрузка сборок со строгими именами в Visual C# (Sharp)

0

В  предыдущем  разделе  был  продемонстрирован  способ  динамической  загрузки, в котором явным образом определялось местонахождение сборки, после чего соавался экземпляр типа этой сборки. Другой подход к созданию экземпляра сборки заключается в использовании формального объявления типа.

В .NET обращаться к сборке можно легким или более трудным способом. Это побно определению личности человека разными способами. Простым способом определить мою личность будет использовать мое имя, Кристиан Гросс, что будет приемлемым до некоторой степени, потому что я не единственный Кристиан Гросс на планете. Одним из способов точного установления моей личности будет пмотреть мой паспорт. Но за эту точность приходится расплачиваться необходимтью применения длинного, трудно запоминаемого номера.

Идентификатор сборки Implementation.dll является общим идентификатором напобие имени Кристиан Гросс. А точным идентификатором .NET будет следующий:

Implementations2, Version=l.О.О.О, Culture=neutral, PublicKeyToken=6bc4c8c27c08ba48

Идентификатор довольно трудно выговариваемый, но  он  содержит  всю  необходую информацию. А именно имя (implementations2), номер версии,  культурную среду (комбинация языка  и  страны)  и  идентификатор  с  фиксированным  знаком. Когда   культурная   среда   указывается   как   neutral, то   учитывается   только   язык, а  страна —  нет.  Например,  для  культурной  среды   еп-сд,   если   указано   neutral, то  часть  СА  будет  проигнорирована.

С помощью всех  этих  атрибутов  можно  однозначно  идентифицировать  сборку. Таким образом, можно загрузить определенную версию сборки, что  делает  воожным загрузку нескольких подобных сборок одновременно. Такое конкретизованное обращение к компонентам позволяет  применять  компоненты  в  соответсии с версией  и языком.

Дополнительная информация указывается в файле исходного кода AssemblyInfo.cs, который создается по  умолчанию.  Далее  приводится  фрагмент  исходного  кода сборки Implementations2.dll. Для просмотра содержимого файла Assemblylnfo.cs разверните узел Propertie s  проекта  и дважды  щелкните  по  имени  файла.

[assembly:    AssemblyTitle("Implementations2")] [assembly:    AssemblyDescription("")] [assembly:    AssemblyConfiguration("")] [assembly:    AssemblyCompany("devspace.com")]

[assembly:    AssemblyProduct("Implementations2")]

[assembly:    AssemblyCopyright("Copyright (c) devspace.com 2007")] [assembly:    AssemblyTrademark("")]

[assembly:    AssemblyCulture("")]

[assembly: Guid("9b0a35bc-7170-4104-815b-b97b07a7d2ee")]

// Version information for an assembly consists of the following four values:

// (Информация о версии для сборки (состоит

/ / из следующих четырех значений:)

//  Major Version (Основная версия)

//   Minor Version (Дополнительная версия)

//  Build Number  (Номер сборки)

//   Revision      (Модификация)

II

// You can specify all the values or you can default

// the Build and Revision Numbers

//b y using the ‘*’ as shown below:

// Можно указать все значения или использовать по умолчанию номера сборки II и модификации с помощью ‘*’, как показано далее:

// [assembly: AssemblyVersion("1.О.*")] [assembly: AssemblyVersionCl.0.0.0")] [assembly: AssemblyFileVersion( "1.0.0.0")]

Обратите  внимание  на то,  что  все дескрипторы  сборки  объявлены  как  атрибуты

.NET. Атрибуты, выделенные жирным шрифтом, ссылаются на версию и культуую среду сборки. Корректируя эти атрибуты, можно точно настроить, какую сборку загружать. Более подробно этот процесс изложен в разд. "Управление веиями  сборок" далее  в  этой главе.

Чтобы загрузить конкретную сборку, нужно создать имя сборки следующим образом:

AssemblyName assemblyName = new AssemblyName(value); Assembly assembly = Assembly.Load(assemblyName); object obj = assembly.Createlnstance(info.TypeName);

Переменная value содержит точный идентификатор .NET сборки и передается AssemblyName в качестве параметра конструктора. Созданный экземпляр передаея методу Assembly. Load (), который загружает сборку. Создание экземпляра типа выполняется в такой же последовательности, как было изложено ранее.

Обратите внимание на отсутствие информации о местонахождении сборки. По умоанию на наличие сборки проверяются локальный рабочий каталог исполняемого процесса и кэш GAC.

Источник: Гросс  К. С# 2008:  Пер. с англ. — СПб.:  БХВ-Петербург, 2009. — 576 е.:  ил. — (Самоучитель)

По теме:

  • Комментарии