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

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

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

Сведения о подписи сборок в проектах Visual Basic и C# см. в разделе Создание и использование сборок со строгими именами.

Сведения о подписи сборок в проектах C++ см. в разделе Сборки со строгими именами (C++/CLI).

Примечание.

Подписывание с использованием строгих имен не защищает от реконструирования сборки. Сведения о защите от реконструирования см. в статье о программе Dotfuscator Community.

Типы активов и подписывание

Подписывать можно манифесты приложений и сборки .NET.

  • исполняемые файлы (.exe);

  • манифесты приложений (.exe.manifest);

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

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

Подпишите следующие типы активов:

  1. Сборки, если требуется развернуть их в глобальном кэше сборок (GAC).

  2. Приложение ClickOnce и манифесты развертывания. Visual Studio включает подпись для этих приложений по умолчанию.

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

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

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

Процедура подписывания сборки зависит от используемой версии конструктора проектов.

Для проектов C# .NET Core (и .NET 5 и более поздних версий) в Visual Studio 2022:

  1. Откройте окно свойств проекта (щелкните правой кнопкой мыши узел проекта в Обозреватель решений и выберите "Свойства").
  2. В разделе "Сборка" найдите строгое именование и выберите пункт "Подписать сборку проверка box". При проверка поле отображаются дополнительные параметры для файла ключей и задержки подписывания.
  3. Укажите файл ключа. Если вы решили создать файл ключа, новые файлы ключей всегда имеют формат PFX. Вам нужно ввести имя пользователя и пароль для нового файла.

Для проектов платформа .NET Framework и Visual Basic в Visual Studio 2022 или Visual Studio 2019:

  1. Откройте вкладку "Подпись" окна свойств проекта (щелкните правой кнопкой мыши узел проекта в Обозреватель решений и выберите "Свойства"). Перейдите на вкладку "Подписывание ".
  2. Выберите поле "Подписать сборку проверка".
  3. Укажите файл ключа. Если вы решили создать файл ключа, новые файлы ключей всегда имеют формат PFX. Вам нужно ввести имя пользователя и пароль для нового файла.

Предупреждение

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

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

При наличии доступа к открытому ключу можно использовать отложенную подпись, чтобы отложить применение ключа. Для этого можно установить флажок Только отложенная подпись. Проект с отложенной подписью не будет работать, и нельзя будет выполнить его отладку. Однако можно пропустить проверку во время разработки с помощью Sn.exe (средство строгих имен) с параметром -Vr.

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