在这段代码中,我希望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