Информационный сайт

 

Реклама
bulletinsite.net -> Книги на сайте -> Программисту -> Троелсен Э. -> "С# и платформа .NET. Библиотека программиста" -> 121

С# и платформа .NET. Библиотека программиста - Троелсен Э.

Троелсен Э. С# и платформа .NET. Библиотека программиста — СПб.: Питер, 2004. — 796 c.
ISBN 5-318-00750-3
Скачать (прямая ссылка): cplatforma2004.pdf
Предыдущая << 1 .. 115 116 117 118 119 120 < 121 > 122 123 124 125 126 127 .. 320 >> Следующая

Применение глобального кэша сборок — это еще одно существенное отличие .NHT от классического СОМ. COM-серверы могли размещаться где угодно в файловой системе компьютера, главное — чтобы они были зарегистрированы в системном реестре. В .NHT совместно используемые двоичные файлы должны находиться в точно определенном централизованном хранилище — GAC.
Еще одно различие между различными типами сборок заключается в том, что в сборках для общего доступа используется дополнительная информация о версии. Эта дополнительная информация называется «общим именем» (shared name) или «сильным именем» (strong name). Кроме того, для сборок этого типа среда выполнения не игнорирует информацию о версии, а активно использует ее.
288 Глава 6 • Сборки, потоки и домены приложений
ГНІв ?Л Щей Favortes lads Help
fif • X
Рис. 6.22. Глобальный кэш сборок (GAC)
Проблемы с GAC?
Можете считать заметкой на полях. При работе с Visual S tuciio. N HT Beta 2 (которая была использована при написании этой книги) я неоднократно замечал, что некоторые компьютеры не могут правильно отобразить содержимое GAC. Проблема заключается в том, что для правильного показа GAC необходимо зарегистрировать расширение проводника Windows — сервер СОМ с именем shfijsion.dLL Иногда во время установки Visual Studio.NET shfusion.dll по каким-то причинам не регистрируется. Чтобы решить проблемы с отображением GAC, достаточно просто зарегистрировать shfusion.dU при помощи системной утилиты regsvr32.exe.
При создании сборки для общего доступа нам обязательно потребуется создать уникальное общее имя. Само это имя состоит из следующей информации:
дружественное текстовое имя и «культурная информация» (информация о естественном языке);
• идентификатор версии;
• пара открытый/закрытый ключ;
• цифровая подпись.
Создание общего имени основывается на криптографии открытого ключа. При
создании сборки для общего доступа мы должны создать пару открытый/закрытый ключ (это делается очень просто). Эта пара будет использована .КЕТ-совмсс-компилятором, который затем поместит маркер открытого ключа в манифест сборки (пометив его тегом [ .publ і ckeytoken]). Закрытый ключ не помещается в манифест сборки. Вместо этого он используется для создания цифровой подписи, которая помещается в сборку. Сам закрытый ключ будет храниться в том модуле сборки, в котором находится манифест.
Общие («сильные») имена сборок
Общие («сильные») имена сборок 289
Клиентское приложение
Сборка для пользования (foo.dlll),
установленная в глобальный кэш сборок
В манифесте клиента есть ссылка на внешнюю сборку:.! для общего пользования. Маркер открытого ключа .этой сборки помечен тегом [.publickeytoken]
.assembly extern Foo
¦publickeytoken=
(00 24 00...)-
Манифест сборки для общего пользования содержит такой же маркер открытого ключа, ПОмеченныйтем же тегом [.publickeytokenj
-+* .publickeytoken>
(00 24 00...)
Открытый и закрытый ключ используется для создания цифровой подписи сборки, которая хранится в самой сборке
Рис. 6.23. Механизм проверки идентичности внешней сборки Предположим, что клиент обратился к сборке для общего доступа (сам код
для обращения к такой сборке ничем не отличается от кода для обращения к частной сборке). Еще при создании сборки общего доступа компилятор помещает ее открытый ключ в манифест. Во время выполнения среда выполнения ..N ЕЛ проверяет соответствие маркера открытого ключа сборки, запрашиваемой клиентом (как мы помним, эта информация для всех внешних общих сборок хранится в манифесте клиента), и маркера открытого ключа в самой сборке для общего пользования. Такая проверка гарантирует, что клиент получит именно ту сборку общего пользования, которая ему нужна. Весь этот механизм представлен в виде схемы на рис. 6.23.
Конечно же, применение пары открытый/закрытый ключ и цифровой подписи сборки не ограничивается теми моментами, которые были указаны выше. Однако мы на них останавливаться не будем. Интересующимся мы порекомендуем обратиться к электронной документации по .NET.
Создание сборки для общего пользования
Создание пары открытый/закрытый ключ для сборки производится при помощи утилиты sn.exe (от strong name — «сильное имя*-), У этой утилиты есть множество параметров командной строки, однако пока нас интересует только один параметр:
который используется для создания набора ключей и сохранения их в указанном нами файле с расширением *.snk (рис. 6.24).
Если взглянуть иа содержимое созданного файла (в нашем случае theKey.snk), можно увидеть двоичный код пары ключей (рис, 6.25).
Что же делать дальше с этим файлом? Предположим, что мы создали новую библиотеку классов .NET, которая станет у нас сборкой для общего пользования, Называться она будет при этом SharedAssembly, а код ее будет таким:
290 Глава 6 • Сборки, потоки и домены приложений using System;
using System.Windows.Forms:
namespace SharedAssemb'y (
public class VWKmiVan
public VWimVanOj}
public void Play60sTunes()
' hPSsageBox.Sho\4("*dt a 'сжосс,. strange ""to it's been.. ">. }
Предыдущая << 1 .. 115 116 117 118 119 120 < 121 > 122 123 124 125 126 127 .. 320 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100