Частное развертывание сборки просто
означает, что конечный пользователь
копирует сборку в тот же самый каталог, что
и клиентская программа, использующая ее. Не
нужна никакая регистрация, и не требуется
никакая причудливая инсталляционная
программа. Кроме того, не требуется никакая
очистка системного реестра, не нужна также
и никакая программа деинсталляции для
удаления компонента. Чтобы
деинсталлировать сборку, просто удалите ее
с жесткого диска.
Конечно, ни один программист из
самоуважения никогда не поставит
коммерческий компонент, который конечный
пользователь должен вручную копировать или
удалять какие-либо файлы подобным способом,
//SimpleComponentClient.срр
finclude "stdafx.h"
fusing <mscorlib.dll>
using namespace System;
// использование пространства имен Система;
fusing fusing <C:\OI\NetCpp\Chap7\SimpleComponent\Debug\
SimpleComponent.dll> using namespace SimpleComponent;
// использование пространства имен SimpleComponent;
void main()
{
SomeClass *psc = new SomeClass;
int sum = psc->AddEmUp(3, 4); // суммировать
Console::WriteLine(sum); // сумма
}
Как найти SimpleComponent?
Обратите внимание, что программа
SimpleComponentClient имеет инструкцию fusing,
указывающую компилятору, где найти сборку
SimpleComponent, метаданные которой компилятор
использует для контроля соответствия типов.
Однако, если вы попробуете выполнить
клиентскую программу, то возникнет
исключение System. IQ.FileNotFoundException. Так получится
потому, что загрузчик класса общеязыковой
среды выполнения CLR неспособен найти сборку
SimpleComponent. Чтобы выполнить клиент, нужно
только скопировать сборку SimpleComponent в тот же
самый каталог, где находится программа
SimpleComponentClient.ехе.
Теперь можно рассмотреть и сравнить
декларацию сборки этой клиентской
программы, чтобы увидеть, как она
взаимодействует с декларацией сборки
SimpleComponent, приведенной ранее. Чтобы
рассмотреть декларацию клиентской
программы, используйте команду
Ildasm SimpleComponentClient.exe
Можно заметить, что декларация клиентской программы содержит следующую внешнюю зависимость от сборки SimpleComponent.
.assembly extern SimpleComponent
{
.hash = (2A 1C 2D D7 CA 9E 7E D5 08 5B DO 75 23 D3 50 76
5E 28 EA 31 )
.ver 1:0:584:39032
}
Из этого следует, что клиентская программа ожидает использовать сборку SimpleComponent с номером версии 1:0:584:39032. Однако, поскольку сборка развернута частным образом, на самом деле, когда клиент загружает эту сборку, принятая по умолчанию в общеязыковой среде выполнения CLR политика проверки значения версии проверку номера не выполняет. Просто ответственность за то, что в данном конкретном каталоге развернута нужная версия, возлагается на администратора или инсталляционную программу. Эту заданную по умолчанию политику проверки версии можно отменить, используя файл конфигурации. Хотя в клиентской декларации имеется хэш-код компонента, он фактически не используется общеязыковой средой выполнения CLR для того, чтобы проверить подлинность двоичного кода. И снова это происходит потому, что сборка развернута частным образом. В следующем разделе мы увидим, что номер версии и хэш-код используются автоматически для проверки содержимого кода общедоступных сборок, развернутых в глобальном кэше сборок.