Практическое руководство. Подписывать сборку строгим именем
Примечание.
Хотя .NET Core поддерживает сборки со строгими именами и все сборки в библиотеке .NET Core подписаны, большинству сборок сторонних разработчиков строгие имена не требуются. Дополнительные сведения см. в разделе Подпись строгим именем в GitHub.
Существует несколько способов подписать сборку строгим именем:
- Используя страницу строгого именования сборки>в конструкторе проектов для проекта в Visual Studio. Это самый простой и удобный способ подписать сборку строгим именем.
- С использованием компоновщика сборок (Al.exe), который связывает модуль кода .NET Framework (NETMODULE-файл) с файлом ключа.
- С использованием атрибутов сборки, позволяющих вставить в код данные строгого имени. Можно использовать либо AssemblyKeyFileAttribute , либо AssemblyKeyNameAttribute в зависимости от того, где находится используемый файл ключа.
- С использованием параметров компилятора.
Для подписи сборки строгим именем необходимо иметь пару ключей шифрования. Дополнительные сведения о создании пары ключей см. в статье "Практическое руководство. Создание пары открытого закрытого ключа".
Создание и подпись сборки строгим именем с помощью Visual Studio
- В обозревателе решенийоткройте контекстное меню проекта и выберите Свойства.
- На вкладке "Сборка" вы найдете узел строгого именования .
- Установите флажок "Подписать сборку", который расширяет параметры.
- Нажмите кнопку "Обзор", чтобы выбрать путь к файлу ключа строгого имени.
Примечание.
Чтобы отложить подпись сборки, выберите файл открытого ключа.
Создание и подпись сборки строгим именем с помощью компоновщика сборок
Откройте командную строку разработчика 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
Дополнительные сведения об использовании этого инструмента см. в разделе Компоновщик сборок.
Подпись сборки строгим именем с помощью атрибутов
Добавьте System.Reflection.AssemblyKeyFileAttribute или AssemblyKeyNameAttribute в файл исходного кода и укажите имя файла или контейнера, содержащего пару ключей, которая используется при подписи сборки строгим именем.
Компилируйте файл исходного кода в обычном режиме.
Примечание.
Компиляторы 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
См. также
- Создание и использование сборок со строгими именами
- Практическое руководство. Создание пары открытого и закрытого ключей
- Al.exe (компоновщик сборок)
- Отложенная подпись сборки
- API строгого имени вызывают PlatformNotSupportedException
- Управление подписыванием сборок и манифестов
- Страница "Подписывание" в конструкторе проектов