我有一个部分受信任的AppDomain Sandbox,我执行方法X
,它实例化了MyException:
[Serializable]
class MyException: Exception
{
public MyException():base("My exception") { }
protected MyException(SerializationInfo serializationInfo, StreamingContext streamingContext)
: base(serializationInfo, streamingContext) { }
[SecurityCritical]
public override void GetObjectData(SerializationInfo info, StreamingContext context)
{
base.GetObjectData(info, context);
Console.WriteLine("A line");
}
}
包含A
的程序集MyException
未完全信任Sandbox。在沙箱中执行X
时,会出现TypeLoadException
:
覆盖成员时违反了继承安全规则:MyException.GetObjectData。
我想,在[SecurityCritical]
上GetObjectData
就是它所需要的,但似乎没有效果。
如果我将[assembly: AllowPartiallyTrustedCallers]
添加到A
,并将完全信任的A
加载到Sandbox中,则此代码可以正常运行。但是,A
包含许多类,我只会遇到此特定GetObjectData
的问题。
如果不恢复旧的安全模式,有没有办法让MyException
在没有AllowPartiallyTrustedCallers
的情况下工作,而不用完全信任加载它?