Jor*_*dan 7 c# static-analysis mono.cecil roslyn
我正在尝试编写一些代码来查找任何给定方法的所有方法调用,因为我正在寻找创建一个开源UML序列图表工具.但是,我遇到了麻烦,越过前几行代码:/
API看起来已经发生了巨大的变化,我似乎无法通过查看代码来推断出正确的用法.
当我做:
var workspace = new CustomWorkspace();
string solutionPath = @"C:\Workspace\RoslynTest\RoslynTest.sln";
var solution = workspace.CurrentSolution;
Run Code Online (Sandbox Code Playgroud)
我发现workspace.CurrentSolution有0个项目.我认为这将等同于之前Workspace.LoadSolution( string solutionFile )据称包含解决方案中的任何项目的内容,但我没有找到这条路径的任何成功.
我非常困惑0.o
如果有人可以提供一些关于我如何使用FindReferences API来识别特定方法的所有调用的额外指导,那将非常感谢!
或者,我最好采取静态分析方法吗?我想支持lambdas,iterator方法和async之类的东西.
================================================== ==================
编辑 -
以下是基于已接受答案的完整示例:
using System.Linq;
using Microsoft.CodeAnalysis.CSharp;
using Microsoft.CodeAnalysis.CSharp.Syntax;
using Microsoft.CodeAnalysis.MSBuild;
using Microsoft.CodeAnalysis.FindSymbols;
using System.Diagnostics;
namespace RoslynTest
{
class Program
{
static void Main(string[] args)
{
string solutionPath = @"C:\Workspace\RoslynTest\RoslynTest.sln";
var workspace = MSBuildWorkspace.Create();
var solution = workspace.OpenSolutionAsync(solutionPath).Result;
var project = solution.Projects.Where(p => p.Name == "RoslynTest").First();
var compilation = project.GetCompilationAsync().Result;
var programClass = compilation.GetTypeByMetadataName("RoslynTest.Program");
var barMethod = programClass.GetMembers("Bar").First();
var fooMethod = programClass.GetMembers("Foo").First();
var barResult = SymbolFinder.FindReferencesAsync(barMethod, solution).Result.ToList();
var fooResult = SymbolFinder.FindReferencesAsync(fooMethod, solution).Result.ToList();
Debug.Assert(barResult.First().Locations.Count() == 1);
Debug.Assert(fooResult.First().Locations.Count() == 0);
}
public bool Foo()
{
return "Bar" == Bar();
}
public string Bar()
{
return "Bar";
}
}
}
Run Code Online (Sandbox Code Playgroud)
允许手动添加项目和文档的工作区.
由于您正在尝试加载解决方案,因此您应该使用MSBuildWorkspace,即
可以通过打开MSBuild解决方案和项目文件来填充的工作空间.
您可以创建一个新的MSBuildWorkspace并OpenSolutionAsync与您的电话solutionPath.对于参考发现部分,请看一下SymbolFinder.
| 归档时间: |
|
| 查看次数: |
4296 次 |
| 最近记录: |