Практическое руководство. Отключение функции пропуска строгих имен
Начиная с версии .NET Framework 3.5 с пакетом обновления 1 (SP1), подписи строгого имени не проходили проверку при загрузке сборки в объект AppDomain с полным доверием, например в MyComputer
по умолчанию для зоны AppDomain. Это называется возможностью обхода строгих имен. В среде с полным доверием всегда успешно обрабатываются запросы StrongNameIdentityPermission для подписанных сборок с полным доверием независимо от их подписи. Единственное исключение связано с тем, что сборка должна иметь полное доверие, потому что полное доверие имеет ее зона. Так как в этом случае наличие строгого имени не является решающим фактором, смысла в проверке подписи нет. Пропуск проверки подписей строгого имени позволяет значительно повысить производительность приложения.
Функция пропуска применяется ко всем сборкам с полным доверием, если у них нет отложенных подписей и они загружены в любой домен AppDomain с полным доверием из каталога, заданным свойством ApplicationBase.
Можно отключить пропуск для всех приложений на компьютере, если изменить значение параметра реестра. Для отключения пропуска для отдельного приложения необходимо внести соответствующие изменения в файл конфигурации приложения. Если функция пропуска строгих имен отключена в реестре, ее невозможно включить для отдельного приложения.
При отключении функции пропуска строгие имена проверяются только на правильность; наличие разрешения StrongNameIdentityPermission не проверяется. Если требуется подтвердить то или иное строгое имя, такую проверку необходимо выполнять отдельно.
Important
Возможность принудительного проведения проверки строгого имени зависит от значения параметра реестра, как описано ниже. Если приложение выполняется от имени учетной записи, для которой в списке управления доступом не выделено разрешение на доступ к этому параметру реестра, проведение проверки невозможно. Необходимо настроить права ACL для данного раздела так, чтобы к нему могла получить доступ любая сборка.
Отключение функции обхода строгих имен для всех приложений
На 32-разрядных компьютерах в разделе HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework системного реестра создайте запись DWORD со значением 0 и именем
AllowStrongNameBypass
.На 64-разрядных компьютерах в разделах системного реестра HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework и HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework создать запись типа DWORD со значением 0 с именем
AllowStrongNameBypass
.
Отключение функции обхода строгих имен для отдельного приложения
Откройте или создайте файл конфигурации приложения.
Дополнительные сведения об этом файле см. в разделе "Файлы конфигурации приложений" документа Настройка приложений.
Добавьте следующую запись:
<configuration> <runtime> <bypassTrustedAppStrongNames enabled="false" /> </runtime> </configuration>
Функцию пропуска строгих имен для приложения можно снова включить, удалив соответствующий элемент из файла конфигурации или установив для атрибута значение true
.
Note
Функцию проверки строгих имен можно включать и отключать на уровне приложения, если пропуск строгих имен включен на уровне компьютера. Если функция пропуска на уровне компьютера отключена, строгие имена будут проверяться для всех приложений и пропустить проверку для отдельного приложения будет невозможно.