Опубликован: 11.09.2006 | Доступ: свободный | Студентов: 7650 / 473 | Оценка: 4.26 / 3.45 | Длительность: 30:46:00
ISBN: 978-5-9556-0080-2
Лекция 9:

Создание пакетов установки

Сборки со строгим именем

Обычные сборки могут быть без труда декомпилированы, и код в них может быть повторно использован. Для коммерческих приложений это недопустимо. Сборки, подписанные строгим именем, позволяют обеспечить безопасность, защиту кода, облегчить применение их в несколько приложениях, а также управлять версионностью сборок. Строгое имя является уникальным обозначением сборки. Оно гарантирует невозможность замены вашей сборки другой.

Строгое имя сборки включает в себя частное имя сборки, ее версию, открытый ключ для клиентского приложения и цифровую подпись безопасности. Если сборка была локализована, то в нее также войдет описание культуры локализации.

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

Строгое имя сборки гарантирует ее уникальность и защиту от декомпиляции.

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

Сборка со строгим именем может располагаться в любых местах — корневой папке приложения, произвольной папке локального или удаленного компьютеров, в Интернете.

Одни и те же сборки могут быть использованы в нескольких приложениях. Можно не дублировать эти сборки, а разместить их в так называемом глобальном КЭШе сборок (Global Assembly Cache) — централизованном хранилище сборок. В результате получается значительный выигрыш в размере приложения. В GAC может храниться несколько версий одной сборки, и он может управлять ими. Если сборку разместили в GAC, то она автоматически становится публичной — доступной другим приложениям. Если, напротив, использование подписанной сборки другими приложениями не требуется — достаточно поместить ее в корневую папку приложения.

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

Создание сборки со строгим именем

В комплект поставки Microsoft Visual Studio .NET входят утилиты Microsoft .NET Framework Tools, применяемые для дополнительной работы с приложениями и компонентами. Файлы большинства утилит располагаются в каталоге С\Program Files\Microsoft Visual Studio .NET 2003\SDK\v1.1\Bin. Описание со ссылками на дополнительные справочные ресурсы находится в в папке Bin в документе StartTools.htm. В этой и следующей лекциях мы рассмотрим работу с несколькими утилитами.

Создание сборки со строгим именем сводится к созданию закрытого ключа для шифрования хэш-кода сборки. Для этого используется утилита sn.exe. Непосредственный запуск из папки Bin не позволит приступить к работе — подобно прочим утилитам, ее функции доступны из командной строки. Для запуска sn.exe из командной строки Windows1Для запуска командной строки Windows выбираем "Пуск\Выполнить" и вводим cmd. Сочетание клавиш Windows+R также запускает строку "Выполнить". указываем путь к каталогу и название (рис. 9.3).

Запуск  sn.exe из командной строки Windows

увеличить изображение
Рис. 9.3. Запуск sn.exe из командной строки Windows

Более удобный способ работы с утилитами — использование командной строки Visual Studio .NET. Для ее запуска выбираем Пуск\Все программы\ Microsoft Visual Studio .NET 2003 \ Visual Studio .NET Tools \ Visual Studio .NET 2003 Command Prompt и просто вводим название утилиты (рис. 9.4):

sn.exe
Запуск sn.exe из командной строки Visual Studio.NET

увеличить изображение
Рис. 9.4. Запуск sn.exe из командной строки Visual Studio.NET

Далее мы будем использовать командную строку Visual Studio .NET. В любом случае появляется справка утилиты, которую затем снова можно вывести, набрав одну из команд:

sn.exe - ?
sn.exe –h

Для создания закрытого ключа вводим команду (рис. 9.5):

sn.exe – k "Путь к папке для сохранения ключа\Название ключа.Расширение"
Ключ StrongKey.snk был записан в указанную директорию

увеличить изображение
Рис. 9.5. Ключ StrongKey.snk был записан в указанную директорию

Вместо расширения key можно поставить любое другое. Расширением по умолчанию является .snk. После того как закрытый ключ создан, необходимо прикрепить его к приложению. В окне Solution Explorer проекта дважды щелкаем на файле AssemblyInfo.cs. Если Атрибут [assembly: AssemblyKeyFile("")] содержит путь к закрытому ключу, компилятор использует его для шифрования данных (рис. 9.6).

Использование атрибута [assembly: AssemblyKeyFile("")] для прикрепления ключа к приложению

Рис. 9.6. Использование атрибута [assembly: AssemblyKeyFile("")] для прикрепления ключа к приложению

Также с помощью атрибута [assembly] можно указать версию сборки, настройки культуры и другие параметры (рис. 9.7).

Информация о сборке в атрибутах [assembly]

увеличить изображение
Рис. 9.7. Информация о сборке в атрибутах [assembly]

Сборки, подписанные строгим именем, добавляются в проект так же, как и обычные сборки. Для этого в окне Solution Explorer щелкаем правой кнопкой мыши на папке References и в появившемся контекстном меню выбираем пункт Add Reference… . По умолчанию окно Add Reference открывается на вкладке .NET, в которой нажимаем на кнопку Browse и выбираем сборку. В листинг текущего приложения добавляем пространство имен, применяемое в сборке, используя ключевое слово using. После компиляции сборка будет добавлена в проект.

Елена Дьяконова
Елена Дьяконова

При нажатии на Сумма в примере ArbitraryMethod из Лекция 7, VS 2013 выдается ошибка: 

Необработанное исключение типа "System.InvalidOperationException" в System.Windows.Forms.dll

Дополнительные сведения: Недопустимая операция в нескольких потоках: попытка доступа к элементу управления "lblResult" не из того потока, в котором он был создан.

Затем:

Необработанное исключение типа "System.InvalidOperationException" в mscorlib.dll

Дополнительные сведения: Для каждой асинхронной операции метод EndInvoke может вызываться только один раз.

Александр Сороколет
Александр Сороколет

Свойство WindowState формы blank Maximized. Не открывается почемуто на всё окно, а вот если последующую форму бланк открыть уже на макс открывается :-/