将FxCop TypeNode与System.Type进行比较

时间:2015-11-27 11:45:42

标签: c# types code-analysis fxcop fxcop-customrules

我有一个名为SearchableAttribute的属性,它标记了类的属性。但是,只允许使用此string属性标记[Searchable]类型的属性。为了重写它,我正在尝试编写一个CodeAnalysis规则来分析我的类的属性,检查是否存在[Searchable]属性,如果属性的类型不是{{{},则创建Problem 1}}。

到目前为止,这是我在Rule类中的内容:

string

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

1 个答案:

答案 0 :(得分:0)

Esc 应该可以解决问题。

FWIW,框架类型与其FxCop Microsoft.FxCop.Sdk.FrameworkTypes.String之间没有真正的桥梁。所有映射都需要根据名称创建,理想情况下包括程序集完全限定名称。 TypeNode属性基本上为您提供了访问FxCop框架为您预先创建的映射的快捷方式。