我尝试在UWP应用中找到对windows.applicationmodel.resources.resourceloader.getstring
的所有来电,但compilation.GetSemanticModel().GetSymbolInfo().Symbol
始终为null
。有人可以告诉我我必须添加什么Metadatareference
以便Roslyn能够正确查找符号类型吗?
这是我的代码的一部分:
var workspace = MSBuildWorkspace.Create();
var project = await workspace.OpenProjectAsync(projectFilepath);
var compilation = await project.GetCompilationAsync();
foreach (var tree in compilation.SyntaxTrees) {
var sm = compilation.GetSemanticModel(tree, true);
var root = await tree.GetRootAsync();
FindCall(root, sm, calls);
}
FindCall
查找类似于InvocationExpressions
的{{1}}。但是所有这些电话都缺少类型信息,也就是说,无法知道它是否实际上是对resourceLoader.GetString
的调用。
答案 0 :(得分:0)
MSBuildWorkspace已经应该从项目文件中的信息加载所需的所有MetadataReferences。检查Workspace.Diagnostics集合,以查看打开项目时是否存在任何可能导致您没有正确符号的错误。
如果您正在寻找特定API的参考,您需要先找到相应的Roslyn符号。您可以使用可从项目获得的Compilation对象来执行此操作。如果它是您正在寻找的类型,则可以使用Compilation.GetTypeByMetadataName()方法获取它。如果没有,您可以使用ISymbol API查找您要查找的成员。