使用 Roslyn 以编程方式提取接口
本文关键字:方式提 取接口 编程 Roslyn 使用 | 更新日期: 2023-09-27 18:36:23
我正在寻找一种使用 Roslyn 从文档(c# 类声明)中提取接口的方法。从重新格式化程序示例开始。
MSBuildWorkspace workspace = MSBuildWorkspace.Create();
// Open the solution within the workspace.
Solution originalSolution = workspace.OpenSolutionAsync(project).Result;
// Declare a variable to store the intermediate solution snapshot at each step.
MSBuildWorkspace workspace = MSBuildWorkspace.Create();
Solution originalSolution = workspace.OpenSolutionAsync(project).Result;
Solution newSolution = originalSolution;
foreach (ProjectId projectId in originalSolution.ProjectIds)
{
// Look up the snapshot for the original project in the latest forked solution.
Project proj = newSolution.GetProject(projectId);
var comp = proj.GetCompilationAsync().Result;
///var bind = comp.
if (proj.Name.EndsWith("Core.DataLayer"))
{
foreach (DocumentId documentId in proj.DocumentIds)
{
Document document = newSolution.GetDocument(documentId);
if (IsRepositoryDocument(document))
{
//How to implement this?
var newinterface = GetInterfaceFromRespository(document);
}
}
}
}
我开始使用 Roslyn 团队提供的示例"重新格式化解决方案"。但是,我找不到公共 API 来从给定的类文件中提取接口。当尝试在 Roslyn 源代码中找到此功能时,我只能找到内部类。我在 中找到
了相关类Roslyn 源代码的"src''Features''Core''Portable''ExtractInterface",我可以将它们复制到我的项目中并使其正常工作,但我宁愿不这样做。
TLDR;是否有一个公共 API 可以从 C# 以编程方式从类中提取接口?
请注意,这是在"常规"C# 项目中完成的,而不是在 Visual Studio 扩展或分析器中完成的。
可以使用以下代码语句从 C# 文件中获取所有接口。
string code = new StreamReader(filePath).ReadToEnd();
var syntaxTree = CSharpSyntaxTree.ParseText(code);
var syntaxRoot = syntaxTree.GetRoot();
IEnumerable<InterfaceDeclarationSyntax> interfaceDeclarations = syntaxRoot.DescendantNodes().OfType<InterfaceDeclarationSyntax>();
然后,您可以迭代文件中的可用接口。