C# 有没有办法在自定义异常类中重写GetObjectData,而不使用APTCA?
我有一个部分受信任的AppDomain沙盒,我执行方法C# 有没有办法在自定义异常类中重写GetObjectData,而不使用APTCA?,c#,.net,code-access-security,C#,.net,Code Access Security,我有一个部分受信任的AppDomain沙盒,我执行方法X,它实例化MyException: 程序集A,其中包含MyException,未以完全信任的方式加载到沙盒中。在沙盒中执行X时,会发生TypeLoadException: 重写成员MyException.GetObjectData时违反了继承安全规则 我认为,在GetObjectData上设置[SecurityCritical]是它所需要的,但它似乎没有效果 如果我将[assembly:AllowPartiallyTrustedCalle
X
,它实例化MyException:
程序集A
,其中包含MyException
,未以完全信任的方式加载到沙盒中。在沙盒中执行X
时,会发生TypeLoadException
:
重写成员MyException.GetObjectData时违反了继承安全规则
我认为,在GetObjectData
上设置[SecurityCritical]
是它所需要的,但它似乎没有效果
如果我将[assembly:AllowPartiallyTrustedCallers]
添加到A
,并将A
以完全信任的方式加载到沙箱中,则此代码工作正常。但是,A
包含许多类,我只在这个特定的GetObjectData
中遇到这个问题
在不恢复到旧的安全模型的情况下,有没有办法使MyException
在没有AllowPartiallyTrustedCallers
的情况下工作,并且不以完全信任的方式加载它?可能重复的
[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");
}
}