我需要为 CI/CD 记录一个复杂的解决方案,其中一部分是为所有项目构建单元测试。我的 VS 解决方案包含 17 个项目。
这些项目中的每一个项目至少包含 10 个类,并且大多数类都充满了复杂的方法,有些项目有100 多个类。大多数项目都是控制台应用程序,但我们也有一个ASP MVC项目。
我知道我需要确定工作的优先级,但为了有效地完成工作,我需要为每个类提供完整的方法列表。
有谁知道任何适当的技术来做到这一点?我知道反思是可行的,但它会逐级进行,也可能需要很长时间。
我需要为 CI/CD 记录一个复杂的解决方案,其中一部分是为所有项目构建单元测试。我的 VS 解决方案包含 17 个项目。
这些项目中的每一个项目至少包含 10 个类,并且大多数类都充满了复杂的方法,有些项目有100 多个类。大多数项目都是控制台应用程序,但我们也有一个ASP MVC项目。
我知道我需要确定工作的优先级,但为了有效地完成工作,我需要为每个类提供完整的方法列表。
有谁知道任何适当的技术来做到这一点?我知道反思是可行的,但它会逐级进行,也可能需要很长时间。
前段时间我写了简单的控制台应用程序。此代码自动从您的 .sln 中获取所有方法:
static void Main(string[] args)
{
var rootPath = Directory.GetParent(Directory.GetCurrentDirectory()).Parent.Parent.Parent.FullName;
var dlls = Directory.GetFiles(rootPath, "*.dll", SearchOption.AllDirectories).Where(row => row.Contains("\\bin\\")).Distinct();
foreach (var dll in dlls)
{
var assembly = Assembly.LoadFrom(dll);
var types = assembly.GetTypes();
foreach (var type in types)
{
var members = type.GetMethods(BindingFlags.Instance | BindingFlags.Public | BindingFlags.DeclaredOnly | BindingFlags.Static);
foreach (MemberInfo member in members)
{
Console.WriteLine($"{assembly.GetName().Name}.{type.Name}.{member.Name}");
}
var members2 = type.GetMethods(BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.DeclaredOnly | BindingFlags.Static);
foreach (MemberInfo member in members2)
{
Console.WriteLine($"{assembly.GetName().Name}.{type.Name}.{member.Name}");
}
}
}
}
dlls - 您解决方案中的所有 dll 文件。类型 - dll 中的所有类。成员 - 所有方法。我希望这对你有帮助。