Как получить список всех используемых. Например
using System;
using System.Collections.Generic;
using System.Text;
namespace HelloWorld
{
class Program
{
static void Main(string[] args)
{
String s = "sasdad";
s.ToString();
Console.WriteLine(""Hello, World!"");
}
}
}
Получить ToString.
Ответ
Делаем вот как. Для начала создадим анализатор, как описано в этом вопросе
Нам нужно получить все вызовы методов, и вывести их. Это делается напрямую так:
var workspace = MSBuildWorkspace.Create();
// подставьте путь к вашему проекту
var solution = await workspace.OpenSolutionAsync(@"D:\HelloWorld.sln");
var project = solution.Projects.Single();
var compilation = await project.GetCompilationAsync();
// обходим все деревья (то есть, все файлы)
foreach (var syntaxTree in compilation.SyntaxTrees)
{
var root = await syntaxTree.GetRootAsync();
var model = compilation.GetSemanticModel(syntaxTree);
// получаем всё, что выглядеит как вызов метода
var invocations = root.DescendantNodes().OfType
Например, для вот такого тестового кода:
using System;
namespace HelloWorld
{
class Program
{
static string g = string.Empty;
static void Main(string[] args)
{
string[] strings = { "Hello ", "world" };
foreach (var s in strings)
Console.Write(s.ToString() + s?.ToString());
for (int i = 0; i < strings.Length; i++)
Console.Write(strings[i].ToUpper());
Console.WriteLine();
}
}
}
получаем результат:
Static call, type = System.Console, method = Write, location = Program.cs: (11,16)-(11,59)
Non-static call, type = string, method = ToString, location = Program.cs: (11,30)-(11,42)
Non-static call, type = string, method = ToString, location = Program.cs: (11,47)-(11,58)
Static call, type = System.Console, method = Write, location = Program.cs: (13,16)-(13,41)
Non-static call, type = string, method = ToUpper, location = Program.cs: (13,30)-(13,50)
Static call, type = System.Console, method = WriteLine, location = Program.cs: (14,12)-(14,31)
Комментариев нет:
Отправить комментарий