是否有方法修复自定义System.Security.IPermission实现上的FxCop CA2103警告

本文关键字:实现 FxCop 警告 CA2103 IPermission Security 有方法 自定义 System 是否 | 更新日期: 2023-09-27 18:21:15

我有一个实现IPermission:的类

public class MySecurityPermission : IPermission
{
    private string[] _demandRoles;
    private string[] _denyRoles;
    public MySecurityPermission(string[] demandRoles, string[] denyRoles)
    {
        this._demandRoles = demandRoles;
        this._denyRoles = denyRoles;
    }
}

现在,IPermission接口需要一个Copy()方法,我将其实现为:

public IPermission Copy()
{
    return new MySecurityPermission(this._demandRoles.ToArray(), this._denyRoles.ToArray());
}

请注意,.ToArray()调用之所以存在,是因为它关闭/复制数组,并返回一个新的数组实例,而不是传递相同的数组。

这导致FxCop CA2103:

"请查看以下内容以查找可能的安全漏洞:在"MySecurityPermission.Copy()"中,返回值对'Enumerable.ToArray(此"IEnumerable)"正在传递给"MySecurityPermission"构造函数。"

有办法"解决"这个问题吗?我真的不知道FxCop为什么会抱怨它。如果有人能解释一下,那就太好了。

是否有方法修复自定义System.Security.IPermission实现上的FxCop CA2103警告

似乎是因为代码的执行位置而引发了规则。如果您首先创建变量,则规则将通过:

public IPermission Copy()
{
    var demand = _demandRoles.ToArray();
    var deny = _denyRoles.ToArray();
    return new MySecurityPermission(demand, deny);
}