CodeAccessPermission.Assert 方法

定义

声明调用代码能够通过调用此方法的代码,访问受权限请求保护的资源,即使未对堆栈中处于较高位置的调用方授予访问该资源的权限。 使用 Assert() 会引起安全问题。

public:
 virtual void Assert();
public void Assert ();
abstract member Assert : unit -> unit
override this.Assert : unit -> unit
Public Sub Assert ()

实现

例外

调用代码没有 Assertion

已存在一个用于当前帧的活动的 Assert()

注解

调用堆栈通常表示为向下增长,因此调用堆栈中较高方法调用方法在调用堆栈中较低。 调用 Assert 可防止源自调用堆栈中较低层的堆栈遍程在调用此方法的代码之外继续调用堆栈。 因此,即使调用堆栈上较高的调用方没有访问资源的必要权限,他们仍可以通过对必要权限调用此方法的代码来访问资源。 仅当调用Assert的代码传递其所断言权限的安全检查时,断言才有效。

Assert 调用代码返回到调用方之前,对 的调用是有效的。 一个帧上只能有一个 Assert 处于活动状态。 当帧上存在活动Assert时,尝试调用 Assert 会导致 SecurityException。 调用 RevertAssertRevertAll 以删除活动的 Assert

Assert 对于未授予的权限,将被忽略,因为该权限的需求不会成功。 但是,如果调用堆栈上下部的代码调用 Demand 该权限, SecurityException 则当堆栈遍程到达尝试调用 Assert的代码时,将引发 。 发生这种情况是因为调用 Assert 的代码尚未被授予 权限,即使它尝试了 Assert 权限。

注意

由于调用 Assert 消除了必须向调用链中的所有代码授予访问指定资源的权限的要求,因此,如果使用不当或不当,可能会产生安全问题。 因此,应谨慎使用它。

继承者说明

不能重写此方法。

适用于

另请参阅