我使用
将我的程序集标记为安全透明[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)'成为安全安全关键或透明。
我错过了什么?我该如何修复错误?
答案 0 :(得分:0)
您的代码被视为Transparent
:
透明方法'BitmapLoader.fromStream(Stream)'
在大型程序集中,您可以在任何地方不情愿地设置SecurityTransparent
属性。
通过在AssemblyInfo.cs中输入[assembly: SecurityTransparent]
并重建程序集,我发现了这种不情愿的属性。双重SecurityTransparent属性的错误向我显示要删除的语句。然后就像预想的那样工作。
答案 1 :(得分:0)
将SecurityTransparentAttribute
应用于程序集会强制其所有代码变为透明,而不管任何类型或成员级别的透明度属性。从理论上讲,您还应该fromStream
违反{{1}}方法,以便让您了解此问题。