2014-12-26 2 views
2

Я использую метод SymbolFinder.FindDeclarationsAsync(), чтобы найти символ, объявленный в проекте. Но метод не подходит для полностью квалифицированных имен.Roslyn - найти объявления с полным именем

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

Приведенный выше код возвращает несколько объявлений для строки, как System.String, System.Data.String, System.Reflection.String и т.д.

Есть ли способ указать «System.String» и получить только объект ISymbol для указанного полностью квалифицированного имени?

+0

FindDeclarationsAsync - это API, который вы используете для поиска символов, когда вы хотите искать * не * по имени. См. Ответ Кевина для правильного API. –

ответ

2

Похоже, что вы ищете Compilation.GetTypeByMetadataName().

+0

Этот метод в настоящее время нарушен; см. https://github.com/dotnet/roslyn/issues/3864. Прокрутите вниз для обходного пути. – Grault

+0

Сломанный - довольно сильная формулировка. Это то, что мы разработали. Метод. Мы рассмотрели возможность добавления его версии на IAssemblySymbol для обработки этого случая, но пока этого не сделали. Мы также могли бы сделать метод приемлемым для сборки. –

+0

(я не собирался «сломать», чтобы быть спорным, но я не мог придумать сжатый способ представить беседу на GitHub.) Я взял привязку ошибок OP и сделал метод 'IEnumerable ResolveType', Я обычно называю «первым». Поэтому, если у меня есть голос, вот и все. – Grault

Смежные вопросы