覆盖函数InitializeLifetimeService的SecurityCritical没有影响

时间:2011-01-17 12:26:42

标签: asp.net-mvc-3 security

我遇到了几个库的一些中等信任问题。我能够使用样本重现错误并在我的MVC项目中引用它。我试图通过这个问题,但不明白我错过了什么。

我一直收到这个错误:

  

违反了继承安全规则   覆盖成员时:   'Temp.Class1.InitializeLifetimeService()'。   安全可访问性   重写方法必须匹配   该方法的安全可访问性   被覆盖。

我认为理解上面的安全透明度错误,并确保我的方法与重写方法相同。这是我的班级:

public class Class1 : MarshalByRefObject
{

    [SecurityCritical]
    public override object InitializeLifetimeService()
    {
        return null;
    }

}

我仍然遇到与上述相同的错误。

一直添加和删除此行没有效果:

[assembly: AllowPartiallyTrustedCallers()]

阅读其他文章我所要做的就是将SecurityCritical属性添加到方法中,但它似乎没有任何影响。

任何想法,或者我缺少的东西?

1 个答案:

答案 0 :(得分:6)

在中型信任Web应用程序中,只有GACed二进制文件被授予完全信任权限。如果您的二进制文件是bin部署的,则它是部分信任且透明的。 MSDN has a good write-up透明代码能够做什么和不能做什么。重要的是,声明[SecurityCritical]成员是一个完全信任的操作。如果您的bin部署的库包含使用[SecurityCritical]注释的成员,则CLR将忽略该注释。

如果您的库设计为bin部署并且可以在Medium信任中运行,则无法覆盖或以其他方式访问[SecurityCritical]成员。考虑重新编写库,以便不要调用这些方法。