2017-11-06 4 views
1

windows.applicationmodel.resources.resourceloader.getstring에 대한 모든 호출을 UWP 응용 프로그램에서 찾으려고 시도하지만 compilation.GetSemanticModel().GetSymbolInfo().Symbol은 항상 null입니다. 누군가가 내게 무엇을 말 할 수 있습니까 Metadatareference Roslyn이 정확하게 기호 유형을 찾을 수 있도록 추가해야합니까?ResourceLoader에 대한 참조를 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); 
    } 

FindCallresourceLoader.GetString 유사 InvocationExpressions을 찾습니다
여기 내가 가지고있는 코드의 일부입니다. 그러나 모든 전화에는 유형 정보가 없습니다. 즉 실제로 windows.applicationmodel.resources.resourceloader.getstring에 대한 호출인지 알 수있는 방법이 없습니다.

답변

0

필요한 모든 MetadataReference는 프로젝트 파일의 정보에서 MSBuildWorkspace에 의해 이미로드되어 있어야합니다. Workspace.Diagnostics 콜렉션을 점검하여 올바른 기호를 갖지 못하게하는 프로젝트를 열 때 오류가 있는지 확인하십시오.

특정 API에 대한 참조를 찾으려면 먼저 해당 Roslyn 기호를 찾아야합니다. 프로젝트에서 가져올 수있는 컴파일 개체를 사용하여이 작업을 수행 할 수 있습니다. 찾고있는 유형이 있으면 Compilation.GetTypeByMetadataName() 메소드를 사용하여 얻을 수 있습니다. 그렇지 않은 경우 ISymbol API를 사용하여 찾고있는 회원을 찾을 수 있습니다.