0

我有一个名为 的属性SearchableAttribute,它标记类的属性。但是,仅string允许使用此属性标记类型的[Searchable]属性。为了限制它,我正在尝试编写一个 CodeAnalysis 规则来分析我的类的属性,检查属性是否存在[Searchable]并创建一个Problemif 属性的类型不是string

到目前为止,这是我在 Rule 课程中所拥有的:

public override ProblemCollection Check(Member member) {
    PropertyNode property = member as PropertyNode;
    if (property == null) {
        return null;
    }

    if (property.Attributes.Any(a => a.Type.FullName.Equals((typeof(SearchableAttribute)).FullName)
            && !property.Type.FullName.Equals((typeof(string)).FullName)) {
        Resolution resolution = getResolution(property);
        Problem problem = new Problem(resolution);
        Problems.Add(problem);
    }

    return Problems;
}

虽然这确实有效,但我不敢相信......不,我不想相信我真的必须比较类型的全名。但是,我无法弄清楚如何正确检查是否存在SearchableAttribute并将属性的类型与字符串进行比较。没有干净优雅的解决方案吗?

4

1 回答 1

0

Microsoft.FxCop.Sdk.FrameworkTypes.String应该做的伎俩。

FWIW,框架类型和它们的 FxCop 之间没有真正的桥梁TypeNode。所有映射都需要基于名称创建,最好包括程序集的完全限定名称。这些FrameworkTypes属性基本上为您提供了访问 FxCop 框架为您预先创建的此类映射的快捷方式。

于 2015-12-02T15:11:09.243 回答