Возможно, вы помните, что в предыдущей
главе пример программы был реализован на С#,
а не на управляемом C++, так как в нем было
много кода графического интерфейса
пользователя, который намного лучше
реализуется на С#, чем на C++. Для целей данной
главы все это вполне бы пригодилось, так как
процесс развертывания одинаков для сборок,
написанных на любом языке .NET, включая С# и
управляемый C++. Однако проект был частично
преобразован (конвертирован) из С# в
управляемый C++. На данном этапе изучения
примера мы разбили нашу программу
администратора гостиницы (Hotel Administrator) на
три сборки. В каталоге CaseStudy для этой главы
имеется прикладная программа AcmeGui (файл с
расширением ЕХЕ), написанная на С#, и два
.assembly extern mscorlib
{
.publickeytoken = (B7 7A 5C 56 19 34 EO 89 )
.hash = (09 BB ВС 09 EF 6D 9B F4 F2 CC IB 55 ... EF 77 )
.ver 1:0:2411:0
}
Рис. 7.9. Ссылки, показываемые Solution Explorer (Поиск решения,
Проводник решения) для AcmeGui
Если вы заново создали какой-нибудь из компонентов, то, конечно, номера компоновки и пересмотра будут отличаться.
Рис. 7.10. Верхний уровень представления (вида), отображаемого утилитой ILDASM
для компонента Customer (Клиент)
Рис. 7.11. ILDASM показывает декларацию Customer .dll
Инструкция метаданных .assembly extern mscorlib указывает, что сборка Customer (Клиент) использует (и поэтому зависит от нее) стандартную сборку mccorlib. dll, которая нужна для всего управляемого кода. Когда в сборке встречается ссылка на другую сборку, вы увидите инструкцию метаданных . assembly extern. Если открыть AcmeGui в ILADASM, то в декларации вы увидите зависимости от нескольких других сборок, включая зависимости от сборок Customer (Клиент) и Hotel (Гостиница), а также зависимости от сборки System. Drawing (Система.Рисунок).
.assembly extern Customer
{
.publickeytoken = (8В ОЕ 61 2D 60 BD EO CA )
.ver 1:0:641:33530
}
.assembly extern Hotel
{
.publickeytoken = (CF OB C2 2F 8E 2C 15 22 )
.ver 1:0:641:33536
}
.assembly extern System.Drawing
{
.publickeytoken = (BO 3F 5F 7F 11 D5 OA ЗА )
.ver 1:0:2411:0
}
Сборка System. Drawing (Система.Рисунок) — общедоступная сборка, которую можно
легко найти в каталоге \WINNT\Assembly с помощью Проводника Windows (Windows
Explorer). Общедоступная сборка mscorlib не развернута в кэше сборки. Microsoft
сделала единственное исключение для этой сборки, потому что mscorlib так близко
связана с механизмом общеязыковой среды выполнения CLR (mscorwks), что она устанавливается
в соответствующем каталоге установки (\WINNT\Microsoft.NET\Framework) для текущей
версии .NET.
В общедоступной сборке System. Drawing (Система.Рисунок)
инструкция метаданных .publickeytoken = (ВО 3F 5F 7F 11 D5
ОА ЗА) содержит лексему открытого ключа,
представляющую собой самые младшие 8 байтов
хэш-кода открытого ключа, который
соответствует своему секретному ключу,
принадлежащему автору сборки System. Drawing (Система.Рисунок).
Эта лексема открытого ключа не может
фактически непосредственно использоваться
для того, чтобы подтвердить подлинность
автора сборки System. Drawing (Система.Рисунок).
Однако первоначальный открытый ключ,
указанный в декларации System. Drawing (Система.Рисунок)
может использоваться, чтобы математически
проверить, что для того, чтобы подписать
сборку System. Drawing (Система.Рисунок) в цифровой
форме на самом деле использовался
соответствующий секретный ключ. Поскольку
Microsoft создала System.Drawing.dll, лексема открытого
ключа, приведенная выше, принадлежит,
несомненно, Microsoft.