Да, это вполне возможно. Проблема в том, что Roslyn еще не поддерживает все языковые конструкции, поэтому вы можете столкнуться с некоторыми неподдерживаемыми вещами. Деревья выражений не поддерживаются в том смысле, что Roslyn не может скомпилировать код, который генерирует выражения, но вы должны быть в состоянии продвинуться достаточно далеко, чтобы заставить некоторые вещи работать.
На высоком уровне, если вы хотите реализовать это как задачу MSBuild, в вашей задаче сборки вы можете вызвать Roslyn.Services.Workspace.LoadSolution
или Roslyn.Services.Workspace.LoadStandaloneProject
. Затем вы должны пройтись по деревьям синтаксиса в поисках упоминаний о ваших различных методах, а затем связать их, чтобы убедиться, что это действительно тот метод, который, по вашему мнению, вы вызываете. Оттуда вы можете найти узлы синтаксического лямбда-выражения и выполнить любой синтаксический / семантический анализ, какой захотите.
В CTP есть несколько примеров проектов, которые могут оказаться полезными, например, проект RFxCopConsoleCS
, который реализует простое правило в стиле FxCop в Roslyn.
Я должен также упомянуть, что синтаксический анализатор для Roslyn завершен, поэтому чем больше вы можете обойтись без семантической информации, тем лучше.