我正在寻找一种使用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);
}
}
}
}
我开始使用样本"重新格式化解决方案"罗斯林团队提供的。但是,我无法找到一个公共API来从给定的类文件中提取接口。 当试图在Roslyn源代码中找到此功能时,我只能找到内部类。我找到了相关的班级 " SRC \功能\核心\便携式\ ExtractInterface"罗斯林源代码,我可以将它们复制到我的项目中并使其正常工作,但我宁愿不这样做。
TLDR;是否有一个公共API,我可以使用C#以编程方式从类中提取接口?
请注意,这是在"常规" C#项目,而不是Visual Studio扩展或分析器。
答案 0 :(得分:0)
您可以使用以下代码语句从C#文件中获取所有接口。
string code = new StreamReader(filePath).ReadToEnd();
var syntaxTree = CSharpSyntaxTree.ParseText(code);
var syntaxRoot = syntaxTree.GetRoot();
IEnumerable<InterfaceDeclarationSyntax> interfaceDeclarations = syntaxRoot.DescendantNodes().OfType<InterfaceDeclarationSyntax>();
然后您可以迭代文件中的可用接口。