CA2140。透明代码不得引用安全关键项

时间:2014-07-01 17:54:16

标签: c# .net security .net-4.0

我使用

将我的程序集标记为安全透明
[assembly: SecurityTransparent]

在这个程序集中,我有一个类,其方法如下:

class BitmapLoader
{
    [SecuritySafeCritical]
    private static Bitmap fromStream(Stream stream)
    {
        // ...
    }
}

为什么将SecuritySafeCritical属性应用于fromStream方法并不会阻止代码分析报告以下错误?

  

CA2140透明代码不得引用安全关键项

     

透明方法'BitmapLoader.fromStream(Stream)'引用   安全关键方法'Marshal.Copy(byte [],int,IntPtr,int)'。

     

为了在安全性下允许此引用   透明度规则,'BitmapLoader.fromStream(Stream)'必须   成为安全关键或安全关键,或'Marshal.Copy(byte [],   int,IntPtr,int)'成为安全安全关键或透明。

我错过了什么?我该如何修复错误?

2 个答案:

答案 0 :(得分:0)

您的代码被视为Transparent

  

透明方法'BitmapLoader.fromStream(Stream)'

在大型程序集中,您可以在任何地方不情愿地设置SecurityTransparent属性。 通过在AssemblyInfo.cs中输入[assembly: SecurityTransparent]并重建程序集,我发现了这种不情愿的属性。双重SecurityTransparent属性的错误向我显示要删除的语句。然后就像预想的那样工作。

答案 1 :(得分:0)

SecurityTransparentAttribute应用于程序集会强制其所有代码变为透明,而不管任何类型或成员级别的透明度属性。从理论上讲,您还应该fromStream违反{{1}}方法,以便让您了解此问题。