我正在编写一个自定义fxcop规则来检查未使用的本地人。 (是的,有一个existing,但我想排除TestMethods被检查。)
Introspector向我显示TestMethodAttribute在编译时可用:
我似乎无法真正检查属性是否存在。
我尝试了以下方法:
方法1。
_TestAttribType = FrameworkAssemblies.Mscorlib.GetType(Identifier.For("Microsoft.VisualStudio.TestTools.UnitTesting"), Identifier.For("TestMethodAttribute"));
AttributeNode testAttribute = method.GetAttribute(_TestAttribType);
if (testAttribute != null)
return null;
方法2。
if(method.Attributes.Any(attrib => attrib.ToString().Contains("Test")))
return null;
方法3。
if(method.Attributes.Any(attrib => attrib.Type == typeof(TestMethodAttribute))
return null;
方法1不起作用,因为Microsoft.VisualStudio.TestTools.Unittesting不在mscorlib中。第二种方法也不起作用,我不知道为什么。第三种方法无法编译,因为FxCop-API不支持TestMethodAttribute。
如何排除在我的FxCop规则中检查testmethods?
答案 0 :(得分:3)
仅基于名称的简单方法是:
method.Attributes.Any(a => a.Type.Name.Name == "TestMethodAttribute")
如果您想要一个具有一些性能增强功能的更完整的解决方案,请查看反编译器中IsVSUnitTestMethod
规则中MarkMembersAsStatic
方法的实现。