CodeAccessPermission.Assert 方法

定义

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

public:
 virtual void Assert();
public:
 void Assert();
public void Assert ();
[System.Diagnostics.Conditional("FEATURE_MONO_CAS")]
public void Assert ();
abstract member Assert : unit -> unit
override this.Assert : unit -> unit
[<System.Diagnostics.Conditional("FEATURE_MONO_CAS")>]
member this.Assert : unit -> unit
Public Sub Assert ()

实现

属性

例外

调用代码没有 Assertion

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

注解

调用堆栈通常表示为向下增长,因此调用堆栈调用方法中的方法在调用堆栈中较低。 调用 Assert 可防止调用堆栈中的堆栈走低,从而阻止调用堆栈超出调用此方法的代码。 因此,即使调用堆栈上更高的调用方没有访问资源的必要权限,他们仍然可以通过调用此方法以必要权限的代码访问它。 仅当调用 Assert 的代码通过对它断言的权限进行安全检查时,断言才有效。

调用 Assert 生效,直到调用代码返回到调用方。 帧上只能有一个 Assert 活动状态。 当帧上存在活动Assert时尝试调用Assert会导致出现 SecurityException。 调用 RevertAssert 或删除 RevertAll 活动 Assert

Assert 对于未授予的权限忽略,因为对该权限的需求不会成功。 但是,如果调用堆栈Demand上的代码较低,则当堆栈演练到达尝试调用Assert的代码时,将引发一个SecurityException代码。 发生这种情况是因为调用 Assert 的代码尚未授予权限,即使它尝试访问 Assert 它也是如此。

注意

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

继承者说明

不能重写此方法。

适用于

另请参阅