我遇到了几个库的一些中等信任问题。我能够使用样本重现错误并在我的MVC项目中引用它。我试图通过这个问题,但不明白我错过了什么。
我一直收到这个错误:
违反了继承安全规则 覆盖成员时: 'Temp.Class1.InitializeLifetimeService()'。 安全可访问性 重写方法必须匹配 该方法的安全可访问性 被覆盖。
我认为理解上面的安全透明度错误,并确保我的方法与重写方法相同。这是我的班级:
public class Class1 : MarshalByRefObject
{
[SecurityCritical]
public override object InitializeLifetimeService()
{
return null;
}
}
我仍然遇到与上述相同的错误。
一直添加和删除此行没有效果:
[assembly: AllowPartiallyTrustedCallers()]
阅读其他文章我所要做的就是将SecurityCritical属性添加到方法中,但它似乎没有任何影响。
任何想法,或者我缺少的东西?
答案 0 :(得分:6)
在中型信任Web应用程序中,只有GACed二进制文件被授予完全信任权限。如果您的二进制文件是bin部署的,则它是部分信任且透明的。 MSDN has a good write-up透明代码能够做什么和不能做什么。重要的是,声明[SecurityCritical]成员是一个完全信任的操作。如果您的bin部署的库包含使用[SecurityCritical]注释的成员,则CLR将忽略该注释。
如果您的库设计为bin部署并且可以在Medium信任中运行,则无法覆盖或以其他方式访问[SecurityCritical]成员。考虑重新编写库,以便不要调用这些方法。