Практическое руководство. Подписывать сборку строгим именем

Примечание.

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

Существует несколько способов подписать сборку строгим именем:

  • Используя страницу строгого именования сборки>в конструкторепроектов для проекта в Visual Studio. Это самый простой и удобный способ подписать сборку строгим именем.
  • С использованием компоновщика сборок (Al.exe), который связывает модуль кода .NET Framework (NETMODULE-файл) с файлом ключа.
  • С использованием атрибутов сборки, позволяющих вставить в код данные строгого имени. Можно использовать либо AssemblyKeyFileAttribute , либо AssemblyKeyNameAttribute в зависимости от того, где находится используемый файл ключа.
  • С использованием параметров компилятора.

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

Создание и подпись сборки строгим именем с помощью Visual Studio

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

Примечание.

Чтобы отложить подпись сборки, выберите файл открытого ключа.

Visual Studio 2022: Project properties, Build / Strong naming section.

Создание и подпись сборки строгим именем с помощью компоновщика сборок

Откройте командную строку разработчика Visual Studio или Visual Studio Developer PowerShell и введите следующую команду:

al/out:assemblyName moduleName><>/keyfile:<<keyfileName>

Где:

  • assemblyName — это имя строго подписанной сборки (файл DLL или EXE), которая будет создана компоновщиком сборок.
  • moduleName — это имя модуля кода .NET Framework (NETMODULE-файла), который содержит один или несколько типов. NETMODULE-файл можно создать путем компиляции кода с параметром /target:module в C# или Visual Basic.
  • keyfileName — это имя контейнера или файла, содержащего пару ключей. Компоновщик сборок интерпретирует относительный путь с точки зрения текущего каталога.

Следующий пример подписывает сборку MyAssembly.dll строгим именем с помощью файла ключа sgKey.snk.

al /out:MyAssembly.dll MyModule.netmodule /keyfile:sgKey.snk

Дополнительные сведения об использовании этого инструмента см. в разделе Компоновщик сборок.

Подпись сборки строгим именем с помощью атрибутов

  1. Добавьте System.Reflection.AssemblyKeyFileAttribute или AssemblyKeyNameAttribute в файл исходного кода и укажите имя файла или контейнера, содержащего пару ключей, которая используется при подписи сборки строгим именем.

  2. Компилируйте файл исходного кода в обычном режиме.

    Примечание.

    Компиляторы C# и Visual Basic выдают предупреждения (CS1699 и BC41008, соответственно), если в исходном коде встречается AssemblyKeyFileAttribute или AssemblyKeyNameAttribute . Эти предупреждения можно игнорировать.

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

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

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

Подпись сборки строгим именем с использованием компилятора

Компилируйте файлы исходного кода с помощью параметра компилятора /keyfile или /delaysign в C# и Visual Basic либо параметра компоновщика /KEYFILE или /DELAYSIGN в C++. После имени параметра добавьте двоеточие и имя файла ключей. При использовании компиляторов, работающих в режиме командной строки, можно скопировать файл ключей в каталог, содержащий файлы исходного кода.

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

В следующем примере используется компилятор C# и сборка UtilityLibrary.dll подписывается строгим именем с помощью файла ключа sgKey.snk.

csc /t:library UtilityLibrary.cs /keyfile:sgKey.snk

См. также