Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Организация может иметь тесно защищенную пару ключей, к которым разработчики не могут ежедневно обращаться. Открытый ключ часто доступен, но доступ к закрытому ключу ограничен только несколькими пользователями. При разработке сборок с строгими именами каждая сборка, ссылающаяся на конечную сборку с строгим именем, содержит маркер открытого ключа, используемый для предоставления целевой сборки строгого имени. Для этого требуется, чтобы открытый ключ был доступен во время процесса разработки.
Вы можете использовать задержку или частичное подписание во время сборки для резервирования места в переносимом исполняемом файле (PE) для подписи строгого имени, но отложить фактическое подписание до некоторого последующего этапа, как правило, перед доставкой сборки.
Чтобы выполнить отложенное подписывание сборки, используйте следующие шаги.
Получите часть открытого ключа пары ключей из организации, которая выполнит конечную подпись. Обычно этот ключ находится в виде SNK-файла , который можно создать с помощью средства строгого имени (Sn.exe), предоставленного пакетом SDK для Windows.
Аннотируйте исходный код сборки с двумя пользовательскими атрибутами из System.Reflection.
AssemblyKeyFileAttribute, который передает имя файла, содержащего открытый ключ в качестве параметра конструктору.
AssemblyDelaySignAttribute указывает на использование отложенного подписания путем передачи значения true в параметр конструктора.
Рассмотрим пример.
[assembly:AssemblyKeyFileAttribute("myKey.snk")]; [assembly:AssemblyDelaySignAttribute(true)];
[assembly:AssemblyKeyFileAttribute("myKey.snk")] [assembly:AssemblyDelaySignAttribute(true)]
<Assembly:AssemblyKeyFileAttribute("myKey.snk")> <Assembly:AssemblyDelaySignAttribute(True)>
Компилятор вставляет открытый ключ в манифест сборки и резервирует пространство в pe-файле для полной строгой подписи имени. Реальный открытый ключ должен храниться во время сборки, чтобы другие сборки, ссылающиеся на эту сборку, могли получить ключ для хранения в собственной ссылке на сборку.
Так как сборка не имеет допустимой подписи строгого имени, проверка этой подписи должна быть отключена. Это можно сделать с помощью параметра -Vr с помощью средства "Строгое имя".
В следующем примере отключается проверка для сборки под названием myAssembly.dll.
sn -Vr myAssembly.dll
Чтобы отключить проверку на платформах, где невозможно запустить средство Строгого имени, например микропроцессоры Advanced RISC Machine (ARM), используйте параметр -Vk для создания файла реестра. Импортируйте файл реестра в реестр на компьютере, где требуется отключить проверку подлинности. В следующем примере создается файл реестра для
myAssembly.dll
.sn -Vk myRegFile.reg myAssembly.dll
При использовании параметра -Vr или -Vk можно дополнительно включить SNK-файл для подписи тестового ключа.
Предупреждение
Не стоит полагаться на сильные имена для безопасности. Они предоставляют только уникальную идентичность.
Замечание
Если вы используете отложенное подписывание во время разработки с помощью Visual Studio на 64-разрядном компьютере и компилируете сборку для Any CPU, возможно, потребуется дважды применить опцию -Vr. (В Visual Studio Any CPU — это значение свойства сборки Platform Target; при компиляции из командной строки это значение по умолчанию.) Чтобы запустить приложение из командной строки или из проводника, используйте 64-разрядную версиюSn.exe (Strong Name tool) для применения параметра -Vr к сборке. Чтобы загрузить сборку в Visual Studio во время разработки (например, если сборка содержит компоненты, используемые другими сборками в приложении), используйте 32-разрядную версию средства строгого имени. Это связано с тем, что JIT-компилятор (компилятор «точно в срок») компилирует сборку в 64-разрядный машинный код при выполнении сборки из командной строки и в 32-разрядный машинный код при загрузке сборки в среду проектирования.
Позже, как правило, перед доставкой вы отправляете сборку в центр подписи вашей организации для фактического подписывания строгого имени с помощью параметра -R с помощью средства строгого имени.
Следующий пример подписывает сборку с именем myAssembly.dll с сильным именем с помощью пары ключей sgKey.snk.
sn -R myAssembly.dll sgKey.snk