在這段代碼中,我希望ReadFileSystem方法被禁止在文件系統上聲明一個權限。如何否認CAS斷言?
我預計這會拋出fileIo.Assert(),但它沒有。爲什麼?
using System.Security.Permissions;
static void Main(string[] args)
{
var fileIo = new FileIOPermission(PermissionState.Unrestricted);
var secuPerm = new SecurityPermission(SecurityPermissionFlag.Assertion);
PermissionSet set = new PermissionSet(PermissionState.Unrestricted);
set.AddPermission(fileIo);
set.AddPermission(secuPerm);
set.Deny();
ReadFileSystem();
Console.Read();
}
private static void ReadFileSystem()
{
var fileIo = newFileIOPermission(PermissionState.Unrestricted);
fileIo.Assert();
DirectoryInfo dir = new DirectoryInfo("C:/");
dir.GetDirectories();
}
更新
偉大的鏈接在這裏CAS:http://blogs.msdn.com/shawnfa/archive/2004/08/25/220458.aspx
binarycoder是完全正確的。 .NET很少在內部聲明......它通常需要。需求是什麼堆棧走,會發現拒絕堆棧和失敗。對於所有文件,IO .NET都需要。但是一旦它在棧上發現一個斷言,棧走就停止了。 – 2009-03-08 10:12:29