DynamicMethod.IsSecuritySafeCritical Свойство

Определение

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

public:
 virtual property bool IsSecuritySafeCritical { bool get(); };
public override bool IsSecuritySafeCritical { get; }
member this.IsSecuritySafeCritical : bool
Public Overrides ReadOnly Property IsSecuritySafeCritical As Boolean

Значение свойства

Boolean

Значение true, если динамический метод надежен с точки зрения безопасности на текущем уровне доверия; значение false, если он является критическим с точки зрения безопасности или прозрачным.

Исключения

В этом динамическом методе отсутствует тело метода.

Комментарии

IsSecuritySafeCriticalСвойства IsSecurityCriticalи IsSecurityTransparent свойства сообщают о уровне прозрачности динамического метода, определяемом средой CLR. Сочетания этих свойств показаны в следующей таблице:

Уровень безопасности IsSecurityCritical IsSecuritySafeCritical IsSecurityTransparent
Critical true false false
Сейф критическое true true false
Прозрачный false false true

Использовать эти свойства гораздо проще, чем просматривать заметки о безопасности для сборки и ее типов, проверять текущий уровень доверия и пытаться дублировать правила среды выполнения.

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

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

  • Прозрачность динамического метода, связанного с доверенной сборкой (т. е. сборкой со строгим именем, установленной в глобальном кэше сборок), описана в следующей таблице.

    Заметка к сборке Прозрачность уровня 1 Прозрачность уровня 2
    Полностью прозрачный Прозрачный Прозрачный
    Полностью критически важно Критический Критический
    Смешанная прозрачность Прозрачный Прозрачный
    Безопасность, не зависящая от безопасности Критический в плане безопасности Критически важно

    Например, если вы связываете динамический метод с типом, который находится в mscorlib.dll, который имеет уровень 2 смешанной прозрачности, динамический метод является прозрачным и не может выполнять критический код. Сведения об уровнях прозрачности см. в разделе "Прозрачный код безопасности", "Уровень 1 " и "Прозрачный код безопасности" уровня 2.

    Примечание

    Связывание динамического метода с модулем в сборке доверенного уровня 1, которая не зависит от безопасности, например System.dll, не разрешает повышение доверия. Если набор предоставления кода, вызывающего динамический метод, не включает набор предоставления System.dll (то есть полное доверие), SecurityException возникает при вызове динамического метода.

  • Прозрачность динамического метода, связанного с частично доверенной сборкой, зависит от того, как загружается сборка. Если сборка загружается с частичным доверием (например, в изолированный домен приложения), среда выполнения игнорирует заметки безопасности сборки. Сборка и все его типы и члены, включая динамические методы, рассматриваются как прозрачные. Среда выполнения уделяет внимание заметкам безопасности только в том случае, если сборка с частичным доверием загружается с полным доверием (например, в домен приложения по умолчанию классического приложения). В этом случае среда выполнения назначает динамический метод прозрачности по умолчанию для методов в соответствии с заметками сборки.

Дополнительные сведения об эмитировать отражение и прозрачность см. в разделе "Проблемы безопасности в эмитировать отражение". Сведения о прозрачности см. в разделе "Изменения безопасности".

Применяется к

См. также раздел