将对ResourceLoader的引用添加到roslyn编译中

时间:2017-11-06 10:39:23

标签: c# uwp roslyn

我尝试在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的调用。

1 个答案:

答案 0 :(得分:0)

MSBuildWorkspace已经应该从项目文件中的信息加载所需的所有MetadataReferences。检查Workspace.Diagnostics集合,以查看打开项目时是否存在任何可能导致您没有正确符号的错误。

如果您正在寻找特定API的参考,您需要先找到相应的Roslyn符号。您可以使用可从项目获得的Compilation对象来执行此操作。如果它是您正在寻找的类型,则可以使用Compilation.GetTypeByMetadataName()方法获取它。如果没有,您可以使用ISymbol API查找您要查找的成员。