Компьютерные книги
Главное меню
Главная Поиск по сайту Добавить материал О нас Карта книг Карта сайта
Реклама
computersbooks.net -> Добавить материал -> Языки программирования -> Ватсон К. -> "С#" -> 285

С# - Ватсон К.

Ватсон К. С# — Лори, 2005 . — 879 c.
ISBN 1-861004-98-2
Скачать (прямая ссылка): vatsonc2005.pdf
Предыдущая << 1 .. 279 280 281 282 283 284 < 285 > 286 287 288 289 290 291 .. 404 >> Следующая

608

Глава 21

Сочетание имени модуля, номера его версии и общего ключа гарантированно является уникальным; такое сочетание называется строгим именем.

В .NET Framework предусмотрен специальный инструмент sn.exe, предназначенный для создания строгих имен (ап расшифровывается как Strong Name — строгое имя). К сожалению, этот инструмент может использоваться только из командной строки, и придется настроить переменную среды path перед тем, как вы сможете воспользоваться им (инструкции содержатся в приложении А).

Запустите командную строку с помощью VS Command Prompt (выбрав пункт меню View | Other Windows | Command Window) или откройте окно командной строки непосредственно в Windows. Для того чтобы создать ключ, потребуется задать некоторое имя файла (обычно с расширением . snk), к которому вы собираетесь, обращаться нз своего модуля:

ап -k shapes.snk

Это приведет к созданию файла с именем shapes.snk в текущей директории. Для того, чтобы пометить модуль с помощью данного ключа, модифицируйте атрибут AssemblyKeyFile, находящийся в последней части файла Assemblyinfo.es вашего проекта:

[aaserably: AsaemblyKeyFile ('shapes. snk.' > 1

В VS местонахождение ключа является относительным к директории вашего проекта obj\debug или obj\releaae; если вы помещаете файл в какую-либо другую директорию, например, в корневую директорию проекта, то необходимо задать путь К ЭТОЙ директории: [assembly: AssemblyKeyFile{в-..\..\shapes.snk¦)].

Обратите внимание на то, что при использовании компилятора командной строки следует просто добавить строку AssemblyKeyFile в НаЧОЛО вашего файла shapes. cs,

перед которой должны располагаться соответствующие директивы using.

using System.Reflections 1

using System.Runtime.CompilerServicesj [assembly: AsaemblyXeyFile(’shapes.snk*)]

Теперь необходимо заново откомпилировать модуль shapes.dll. Если VS оказывается не в состоянии обнаружить файл shapes.snk, то проект не компилируется и выдается сообщение об ошибке следующего вида:

Cryptographic failure while signing assembly (Ошибка шифрования при попытке пометить файл)

‘C:\BegCSharp\Chapter21\Shapes\obj\Debug\Shapes.dir — ‘Error reading key file ‘shapes.snk' (‘C:\BegCSbarp\Cbapler2l\Shapes\obj\Debug\Shapes,dll’ — ‘Ошибка при попытке прочитать файл ‘shapes.snk’)

— The system cannot find the file specified.

(— Система не в состоянии обнаружить указанный файл,)

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

После того как проект будет успешно построен заново, модуль будет считаться помеченным, Еслн теперь внимательно посмотреть на манифест модуля shapes, dll С ПОМОЩЬЮ ildasm, ТО можно обнаружить вновь созданный общий ключ и встроенный внутрь модуля (см. рис. слева).

Обратите внимание на то, что если вы прямо сейчас попытаетесь запустить shapeuser.exe, не откомпилировав его заново, то вы получите приведенное ниже сообщение об ошибке, поскольку модуль shapes.dll больше не соответствует обращению к нему (внешняя ссылка указывает на частный модуль, a shapes теперь является общнм модулем):

Unhandted Exception: System. 10. FileboadException: The located assembly’s manifest (Необрабатываемая исключительная ситуация: System.IO.FileLoadException: Имеющееся определение)

definition with name 'shapes' does not match the assembly reference. File name: “shapes’ (манифеста модуля с именем 'shapes' не соответствует ссылке на этот модуль.

Имя файла: *shapes')

at ShapeUser.ShapeUser.MainQ

Этой ошибки не произошло бы, если бы мы создали shapeueer с помощью KS, поскольку KS создает частную копию модуля, а эта копия не претерпевает никаких изменений.

Теперь необходимо повторно откомпилировать файл shapeuser.ee, что позволит обновить ссылку на внешний модуль, находящуюся в shapeueer.exe в соответствии с помеченной версией 6hapee.dll, После повторной компиляции все будет работать как прежие, поскольку при этом используется локальная копия shapes.dll.

В завершение необходимо скопировать модуль, который теперь обладает строгим именем, в кэш глобальных модулей (winNT\assembiy). В качестве альтернативы можно воспользоваться специальным инструментом командной строки .NET, который называется eracutii (Global Assembly Cache Utility — утилита для работы с кэшем глобальных модулей). Чтобы инсталлировать shapes.dll в этот глобальный кэш, следует воспользоваться инструментом gacutil с флагом /i из командной строки Visual Studio.NET:

gacutll /1 shapes.d

Полученное сообщение 'Assembly successfully added to the cache" свидетельствует об успешной инсталляции данного модуля.

Прн установке коммерческого приложения наиболее предпочтительным способом включения общего модуля в глобальный кэш является использование Windows Installer.
Предыдущая << 1 .. 279 280 281 282 283 284 < 285 > 286 287 288 289 290 291 .. 404 >> Следующая
Книги
Web-программирован-
ие
Аппаратное обеспечение Графика Руководство по П.О. Самоучитель Теория программирования Фотошоп Языки программирования
Новые книги
Вирт Н. "Систематическое программирование " (Теория программирования)

Эком "Microsoft Excel 2000 шаг за шагом Русская версия самоучитель " (Самоучитель)

Поляков А.Ю. "Методы и алгоритмы компьютерной графики в примерах Vizual C++" (Графика)

Баяковский Ю.М. "Графическая библиотека Open GL " (Графика)

Валиков А. "Технология " (Языки программирования)
Авторские права © 2013 ComputersBooks. Все права защищены.