Как создать пару открытого-закрытого ключа

Чтобы подписать сборку строгим именем, необходимо иметь пару ключей (открытого и закрытого). Эта пара открытых и закрытых криптографических ключей используется во время компиляции для создания сборки с строгим именем. Вы можете создать пару ключей с помощью средства "Строгое имя" (Sn.exe). Файлы пар ключей обычно имеют расширение SNK .

Замечание

В .NET (.NET Core и .NET 5 и более поздних версиях) строгие имена не имеют проверки во время выполнения. Подписывание строгого имени имеет значение в основном для .NET Framework и .NET Standard 2.0 в сценариях совместимости с .NET Framework. Если вы не нацелены на .NET Framework, вам обычно не нужно задавать строгое имя сборки, если это не требуется вашей организацией или потребителями.

Замечание

В Visual Studio страницы свойств проекта C# и Visual Basic содержат вкладку Signing, которая позволяет выбирать существующие файлы ключей или создавать новые файлы ключей без использования Sn.exe. В Visual C++ можно указать расположение существующего файла ключа на странице "Дополнительно" в разделе компоновщика раздела "Свойства конфигурации" окна "Страницы свойств". Использование атрибута AssemblyKeyFileAttribute для идентификации пар файлов ключей было устарело начиная с Visual Studio 2005 года.

Создание пары ключей

Замечание

Sn.exe не входит в пакет SDK .NET в любой операционной системе. Он доступен только в Windows, где его можно получить, установив Visual Studio или пакет SDK Windows.

Чтобы создать пару ключей, в командной строке введите следующую команду:

sn –k<Имя файла>

В этой команде имя файла — это имя выходного файла, содержащего пару ключей.

В следующем примере создается пара ключей с именем sgKey.snk.

sn -k sgKey.snk

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

sn -k keypair.snk

Затем извлеките открытый ключ из пары ключей и скопируйте его в отдельный файл:

sn -p keypair.snk public.snk

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

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

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

[assembly:AssemblyKeyFileAttribute("keyfile.snk")];
[assembly:AssemblyKeyFileAttribute("keyfile.snk")]
<Assembly:AssemblyKeyFileAttribute("keyfile.snk")>

См. также