我有两个不同项目的解决方案。我使用SyntaxWalker处理ProjectA.Class1
中的一些内容。但是,ProjectA.Class1
引用了ProjectB.Class2
。
是否有办法允许语法walker遍历外部类?当两个类都在同一个项目中但在不同的文件(文档)中时,我甚至无法做到。它总是通过相同的文件。如果两个类都在同一个文件中,那么它可以工作。如果我将它们提取为单独的,它就不会......
我正在研究测试覆盖率工具。用户单击VS中的方法,然后:
我想知道如何配置语法walker \ rewriter来识别同一解决方案中的其他类。
答案 0 :(得分:0)
您将需要访问Symbol API。我试图通过一个简单的经验法则:
您在评论中提到过您想要遍历方法并找出有关每个方法声明的一些信息。这里有一些(天真的)代码可以让你开始使用符号API。
我认为您可以访问正在分析的Project
。
Project myProject;
public void ProcessMethod(MethodDeclarationSyntax method)
{
//Get the semantic model
var filePath = method.SyntaxTree.FilePath;
var containingDocument = myProject.Documents.Where(n => n.FilePath == filePath).Single();
var model = containingDocument.GetSemanticModelAsync().Result;
//...
//Do your processing on the current method here...
//...
//Process the invoked methods.
var invocations = method.DescendantNodes().OfType<InvocationExpressionSyntax>();
foreach(var invocation in invocations)
{
var invokedSymbol = model.GetSymbolInfo(invocation).Symbol; //Might be null
var invokedSymbolSyntax = (MethodDeclarationSyntax)invokedSymbol.DeclaringSyntaxReferences.First().GetSyntax(); //Partial methods might be declared in multiple places
ProcessMethod(invokedSymbolSyntax);
}
}
注意:
SymbolFinder
。