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