2014-12-26 4 views
2

프로젝트에서 선언 된 심볼을 찾으려면 SymbolFinder.FindDeclarationsAsync() 메소드를 사용하고 있습니다. 그러나이 메서드는 정규화 된 이름과 일치하지 않습니다.Roslyn - 정규화 된 이름으로 선언 찾기

var symbols = SymbolFinder.FindDeclarationsAsync(projects, "String", true).Result; 

위의 코드는 등

은 "선택 System.String"을 지정하고 얻을 방법이 있나요, 선택 System.String, System.Data.String, System.Reflection.String 같은 문자열에 대해 여러 선언을 반환 지정된 정규화 된 이름에 대한 ISymbol 개체 만?

+0

FindDeclarationsAsync는 성명으로 검색하지 않고 기호를 검색 할 때 사용하는 API입니다. 올바른 API에 대한 Kevin의 대답을 참조하십시오. –

답변

2

Compilation.GetTypeByMetadataName()을 (를) 찾고있는 것처럼 들립니다.

+0

이 방법은 현재 고장났습니다. 자세한 내용은 https://github.com/dotnet/roslyn/issues/3864를 참조하십시오. 해결 방법을 찾으려면 아래로 스크롤하십시오. – Grault

+0

깨진 것은 다소 강한 표현입니다. 그것이 실제로 우리가 설계 한 방법입니다. 우리는 IAssemblySymbol에이 버전을 추가하여 해당 케이스를 처리 할 것을 고려했지만 아직 작성하지 않았습니다. 또한 잠재적으로 메서드가 어셈블리 정규화 된 이름을 허용하도록 만들 수 있습니다. –

+0

(논란의 여지가있는 "깨진"의도는 아니지만 GitHub에서 대화를 표현하는 간결한 방법을 생각할 수 없었다.) 나는 버그 OP의 압정을 잡아서 IEnumerable ResolveType' 메서드를 만들었습니다. 결과 나는 일반적으로 '첫 번째'라고 부른다. 투표권이 있다면 그게 전부입니다. – Grault