我刚看到这个问题:
我有一个问题。使用以下代码:
private void button1_Click(object sender, EventArgs e)
{
Layer1();
MessageBox.Show("OK");
}
private void Layer1()
{
try
{
Layer2();
}
catch (SecurityException)
{
MessageBox.Show("Caught");
}
Layer2b();
}
private void Layer2()
{
new System.Security.Permissions.FileIOPermission(PermissionState.Unrestricted).Deny();
GC.Collect();
Layer3();
}
private void Layer2b()
{
Layer3();
}
[FileIOPermission(SecurityAction.LinkDemand, Write=@"C:\temp")]
private void Layer3()
{
using (FileStream stream = new FileStream(@"C:\temp\test.txt", FileMode.Create))
{
}
}
为什么代码会在调用时产生安全异常Layer2
?如何处理权限对象,我想垃圾收集器会销毁该对象,因为我没有对它的活动引用,但是代码说Caught,然后OK,所以很明显权限拒绝是有效的用于通过 Layer2 的呼叫。
是什么赋予了?我错过了什么?当谈到 .NET 中的安全/权限系统时,我承认自己是一个完全的初学者,所以如果这个问题真的很基本,请原谅我。
像这样的安全许可/拒绝会标记堆栈还是什么?否则,为什么对 Layer2b 无效?很明显,它是同一个线程,虽然它没有被垃圾收集杀死,但它在某个时候会被删除/销毁/清除。