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

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

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

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

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

Это важно

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

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

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

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

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

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

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

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

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

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

Замечание

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

См. также