Как видите, элемент вложен в элемент , ис­пользующий атрибуты name и publicKeyToken для указания понятного имени компоновочного блока и соответствующего кода открытого ключа. Сам элемент указывает версию и (с помощью атрибута href) адрес загружаемого компоновочного блока. Если вы удалите CarLibrary.dll версии 2.0.0.0 из струк­туры GAC, этот клиент все равно будет выполняться успешно, поскольку среда CLR сможет найти внешний компоновочный блок в C:\MyAsms.

Однако если вы удалите каталог MyAsms со своей машины, то клиент работать не сможет. Очевидно, что элементы (если таковые присутствуют) име­ют преимущество по сравнению с проверкой GAC.

Замечание. Если размещать компоновочные блоки в случайных местах на машине, велика вероят­ность того, что у вас, в конце концов, возникнет необходимость воссоздания реестра системы (из-за соответствующих проблем DLL), поскольку при перемещении или переименовании па­пок, содержащих выполняемые двоичные файлы приложений, имеющиеся связи будут нару­шаться. В связи с этим используйте с осторожностью.

Элемент может оказаться полезным при ссылках на компоновоч­ные блоки, размещенные в сети на удаленной машине. Предположим, что у нас есть доступ к папке, размещенной по адресу http://www.intertechTraining.com. В таком случае для загрузки удаленного файла *.dll в кэш загрузки GAC на ло­кальной машине следует изменить элемент так.

Исходный код. Проект CodeBaseClient размещен в подкаталоге, соответствующем главе 11.

<p>Пространство имен System.Configuration</p>

До этого времени все файлы *.config, показанные в этой главе, состояли из из­вестных XML-элементов, по которым среда CLR выясняла адреса внешних компо­новочных блоков. Вдобавок кэтим элементам файл конфигурации клиента может содержать и специальные данные приложения, не имеющие никакого отношения к установке связей. С учетом сказанного становится ясно, почему в .NET Framework используется пространство имен, которое позволяет считывать данные файла кон­фигурации клиента программными средствами.

Пространство имен Sуstem.Configuration определяет небольшой набор типов, которые можно использовать для чтения пользовательских установок из файла *.config клиента. Эти пользовательские установки должны задаваться в контексте элемента . Элемент может содержать произвольное числа элементов , определяющих пары ключей и значений, которые могут извлекаться программными средствами.

Предположим, что у нас есть файл *.сonfig дата консольного приложения AppConfigReaderApp, в котором определяется строка связи с базой данных и ука­затель на данные timesToSayHello.

 >

 

 

 appSettings>

Чтение этих значений для использования приложением клиента осуществляет­ся простым вызовом метода экземпляра GetValue() типа System.Configuration. AppSettingsReader. Как показывает следующий пример программного кода, пер­вый параметр: GetValue() задает имя ключа в файле *.config, а второй параметр представляет соответствующий тип ключа (получаемый в C# в результате применении операции typeof).

class Program {

 static void Main(string[] args) {

  // Создание средства чтения и получение строки соединения.

  AppSettingsReader ar = new AppSettingsReader();

  Console.WriteLine(ar.GetValue("appConstr", typeof(string)));

  // Получение числа повторений приветствия и выполнение.

  int numbOfTimes = (int)ar.GetValue("timesToSayHello", typeof(int));

  for (int i = 0; i ‹ numbOfTimes; i++) Console.WriteLine("Йо!");

  Console.ReadLine();

 }

}

Перейти на страницу:

Похожие книги