Практическое руководство. Отключение функции обхода строгого имени

Начиная с версии .NET Framework 3.5 с пакетом обновления 1 (SP1), подписи строгого имени не проходили проверку при загрузке сборки в объект AppDomain с полным доверием, например в MyComputer по умолчанию для зоны AppDomain. Это называется возможностью обхода строгих имен. В среде с полным доверием всегда успешно обрабатываются запросы StrongNameIdentityPermission для подписанных сборок с полным доверием независимо от их подписи. Единственное исключение связано с тем, что сборка должна иметь полное доверие, потому что полное доверие имеет ее зона. Так как в этом случае наличие строгого имени не является решающим фактором, смысла в проверке подписи нет. Пропуск проверки подписей строгого имени позволяет значительно повысить производительность приложения.

Функция пропуска применяется ко всем сборкам с полным доверием, если у них нет отложенных подписей и они загружены в любой домен AppDomain с полным доверием из каталога, заданным свойством ApplicationBase.

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

При отключении функции пропуска строгие имена проверяются только на правильность; наличие разрешения StrongNameIdentityPermission не проверяется. Если требуется подтвердить то или иное строгое имя, такую проверку необходимо выполнять отдельно.

Внимание

Возможность принудительного проведения проверки строгого имени зависит от значения параметра реестра, как описано ниже. Если приложение выполняется от имени учетной записи, для которой в списке управления доступом не выделено разрешение на доступ к этому параметру реестра, проведение проверки невозможно. Необходимо настроить права ACL для данного раздела так, чтобы к нему могла получить доступ любая сборка.

Отключение функции обхода строгих имен для всех приложений

  • На 32-разрядных компьютерах в системном реестре создайте запись DWORD со значением 0 с именем AllowStrongNameBypass HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\. Ключ NETFramework.

  • На 64-разрядных компьютерах в системном реестре создайте запись DWORD со значением 0 с именем AllowStrongNameBypass HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\. NETFramework и HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\. Ключи NETFramework.

Отключение функции обхода строгих имен для отдельного приложения

  1. Откройте или создайте файл конфигурации приложения.

    Дополнительные сведения об этом файле см. в разделе "Файлы конфигурации приложений" документа Настройка приложений.

  2. Добавьте следующую запись:

    <configuration>  
      <runtime>  
        <bypassTrustedAppStrongNames enabled="false" />  
      </runtime>  
    </configuration>  
    

Функцию пропуска строгих имен для приложения можно снова включить, удалив соответствующий элемент из файла конфигурации или установив для атрибута значение true.

Примечание.

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

См. также