Я недавно обновил проект C # с .NET 3.5 до .NET 4. У меня есть метод, который извлекает все методы тестирования MSTest из заданного списка MethodBase
экземпляров. Его тело выглядит так:
return null == methods || methods.Count() == 0
? null
: from method in methods
let testAttribute = Attribute.GetCustomAttribute(method,
typeof(TestMethodAttribute))
where null != testAttribute
select method;
Это работало в .NET 3.5, но после обновления моих проектов до .NET 4 этот код всегда возвращает пустой список, даже если ему дан список методов, содержащих метод, помеченный [TestMethod]
. Что-то изменилось с пользовательскими атрибутами в .NET 4?
Отладка, я обнаружил, что результаты GetCustomAttributesData()
в тестовом методе дают список из двух CustomAttributeData
, которые описаны в окне 'Locals' в Visual Studio 2010 как:
Microsoft.VisualStudio.TestTools.UnitTesting.DeploymentItemAttribute("myDLL.dll")
Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute()
- это то, что я ищу
Когда я вызываю GetType()
в этом втором CustomAttributeData
экземпляре, я получаю {Name = "CustomAttributeData" FullName = "System.Reflection.CustomAttributeData"} System.Type {System.RuntimeType}
. Как я могу получить TestMethodAttribute
из CustomAttributeData
, чтобы я мог извлечь методы тестирования из списка MethodBase
s?