Поделиться через


Подпись со строгим именем для управляемых приложений

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

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

Для проектов Visual C# и Visual Basic в Visual Studio строгое именование задается через панель Подписывание в Конструкторе проектов; см. Страница "Подписывание" в конструкторе проектов.

Для подписи сборки в проектах Visual C++, используются параметры компоновщика; см. Сборки со строгими именами (подписывание сборок) (C++/CLI).

Причины использования строгого именования

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

Что можно указывать со строгим именем

Строгие имена могут быть присвоены сборкам .NET Framework и XML-манифестам. Ниже перечислены некоторые из этих методов.

  • Сборки приложения (.exe)

  • Манифесты приложения (.exe.manifest)

  • Развертывание манифеста (.application)

  • Общие сборки компонентов (.dll)

Что желательно указывать со строгим именем

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

Что необходимо указывать со строгими именами

Необходимо присваивать строгие имена для следующего:

  • DLL, если требуется развернуть их в глобальный кэш сборок (GAC).

  • Манифесты приложения и развертывания ClickOnce. По умолчанию, система работы с проектами Visual Studio использует строгое именование для ClickOnce-развертываемых приложений.

  • Основные сборки взаимодействия, которые используются для взаимодействия c COM-объектами. Средство TLBIMP обеспечивает строгое именование при создании основной сборки взаимодействия из библиотеки типов COM.

Что не желательно указывать со строгим именем

В общем случае следует избегать строгого именования сборок EXE-приложений. Строго именованные приложения или компоненты не могут ссылаться на компонент с нестрогим именем. Таким образом, строгое именование EXE запрещает обращение к DLL с нестрогими именами, которые развертываются с приложением.

По этой причине система работы с проектами Visual Studio не присваивает строгие имена EXE-файлам приложения. Вместо этого она назначает строгое имя манифесту приложения, который внутри указывает на EXE-файл приложения с нестрогим именем.

Кроме того, возможно потребуется избежать строгого именования компонентов, которые принадлежат только вашему приложению. В этом случае строгое именование может усложнить управление зависимостями и добавить неудобства частным компонентам.

Как назначить строгое имя

В Visual Studio назначить строгое имя приложению или компоненту можно, используя область Подписывание в Конструкторе проектов. Область Подписывание поддерживает два метода строгого именования: с помощью файла ключа для строгого имени или с помощью поставщика ключа. Сведения о подписании манифестов содержатся в разделе Практическое руководство. Подписание манифестов приложения и развертывания; сведения о создании файла ключа для строгого имени (.snk файлы) содержатся в разделе Практическое руководство. Создание пары открытого и закрытого ключей.

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

Поставщик ключей и хранилище сертификатов предоставляют другие средства защиты ключей строгих имен. Некоторые поставщики ключей используют смарт-карты в качестве средства проверки подлинности и предотвращения кражи ключа.

Обновление компонентов со строгими именами

Компонент со строгим именем не может быть изменен или обновлен путем простого копирования новой версии поверх старой.

Можно обновить DLL с нестрогим именем в каталоге приложения, просто скопировав новую версию в каталог приложения. Общеязыковая среда выполнения (CLR) будет загружать любую версию, которая физически присутствует на диске.

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

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

См. также

Задачи

Практическое руководство. Подписание манифестов приложения и развертывания

Практическое руководство. Подписывание сборки (Visual Studio)

Практическое руководство. Откладывание подписания сборки (Visual Studio)

Ссылки

Страница "Подписывание" в конструкторе проектов

Основные понятия

Защита приложений ClickOnce

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

Сборки со строгими именами (подписывание сборок) (C++/CLI)

Другие ресурсы

Управление сборками и подписывание манифестов