覆盖函数InitializeLifetimeService的SecurityCritical没有影响

adr*_*anp 2 security asp.net-mvc-3

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

我一直收到这个错误:

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

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

public class Class1 : MarshalByRefObject
{

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

}
Run Code Online (Sandbox Code Playgroud)

我仍然得到与上面相同的错误.

一直添加和删除此行没有任何影响:

[assembly: AllowPartiallyTrustedCallers()]
Run Code Online (Sandbox Code Playgroud)

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

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

Lev*_*evi 6

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

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