Совместимость политики разграничения доступа кода и ее миграция

Политика разграничения доступа кода является устаревшей в .NET Framework 4. В результате при вызове устаревших типов политик и членов явным или неявным (через другие типы и члены) образом могут возникать предупреждения компиляции и исключения среды выполнения.

Чтобы избежать предупреждений и ошибок, нужно:

В этом разделе содержатся следующие подразделы.

  • Явное использование

  • Неявное использование

  • Ошибки и предупреждения

  • Миграция. Замена устаревших вызовов

  • Совместимость. Использование политики разграничения доступа кода прежних версий

Явное использование

Члены, которые непосредственно управляют политикой безопасности или требуют политику разграничения доступа кода для изоляции в "песочнице", являются устаревшими и по умолчанию вызывают ошибки.

Примеры:

Неявное использование

Несколько перегруженных методов загрузки сборки вызывают ошибки из-за неявного использования политики разграничения доступа кода. Эти перегруженные методы используют параметр Evidence, разрешающий политику разграничения доступа кода, и предоставляют сборке набор разрешений.

Далее представлено несколько примеров. Устаревшие перегруженные методы, использующие параметр Evidence:

Ошибки и предупреждения

При использовании устаревших типов и членов возникают следующие сообщения об ошибках. Обратите внимание, что сам тип System.Security.Policy.Evidence не является устаревшим.

Предупреждение времени компиляции:

warning CS0618: '<API Name>' is obsolete: 'This method is obsolete and will be removed in a future release of the .NET Framework. Please use <suggested alternate API>. See <link> for more information.'

Исключение времени выполнения:

NotSupportedException: This method uses CAS policy, which has been obsoleted by the .NET Framework. In order to enable CAS policy for compatibility reasons, please use the <NetFx40_LegacySecurityPolicy> configuration switch. Please see <link> for more information.

Миграция. Замена устаревших вызовов

Определение уровня доверия сборки

Политика разграничения доступа кода часто используется для определения набора разрешений, предоставляемых сборке или домену приложения, или уровня доверия. .NET Framework 4 предоставляет следующие полезные свойства, не требующие разрешения политики безопасности.

Изолирование домена приложения в "песочнице"

Метод AppDomain.SetAppDomainPolicy обычно используется для изолирования в "песочнице" сборок в домене приложения. .NET Framework 4 предоставляет члены, которые не используют метод PolicyLevel для этой цели. Дополнительные сведения см. в разделе Практическое руководство. Выполнение не вполне безопасного кода в изолированной среде.

Определение безопасного и приемлемого набора разрешений для не вполне надежного кода

Приложениям часто требуется определить разрешения, подходящие для изоляции кода, запускаемого из этих приложений. До выпуска версии .NET Framework 4 политика разграничения доступа кода выполняла эту функцию с помощью метода SecurityManager.ResolvePolicy. Вместо этого .NET Framework 4 предоставляет метод SecurityManager.GetStandardSandbox, который возвращает безопасный стандартный набор разрешений для предоставленного свидетельства.

Сценарии без использования "песочницы". Использование перегруженных методов для загрузки сборок

Перегруженные методы загрузки сборок применяются, если вместо изоляции сборки в "песочнице" необходимо использовать параметры, которые недоступны иначе. Начиная с .NET Framework 4 этот сценарий возможен при работе с перегруженными методами загрузки сборок, не использующими в качестве параметра объект System.Security.Policy.Evidence, например с методом AppDomain.ExecuteAssembly(String, String>, Byte>, AssemblyHashAlgorithm).

При необходимости изолировать сборку в "песочнице" следует использовать метод AppDomain.CreateDomain(String, Evidence, AppDomainSetup, PermissionSet, StrongName>).

Совместимость. Использование политики разграничения доступа кода прежних версий

Элемент конфигурации <NetFx40_LegacySecurityPolicy> позволяет указать, будет ли процесс или библиотека использовать политику разграничения доступа кода прежних версий. При включении этого элемента политика и перегруженные объекты свидетельств будут работать как в предыдущих версиях .NET Framework.

ПримечаниеПримечание

Поведение политики разграничения доступа кода определяется для каждой версии среды выполнения, поэтому изменение политики разграничения доступа для одной версии среды выполнения не повлияет на ее поведение в других версиях.

<configuration>
   <runtime>
      <NetFx40_LegacySecurityPolicy enabled="true"/>
   </runtime>
</configuration>

См. также

Задачи

Практическое руководство. Выполнение не вполне безопасного кода в изолированной среде