Подходит ли Roslyn для проверки выражений во время компиляции?

У меня есть набор инструментов, в котором много методов, часто использующих Expression< Func>в качестве параметров Некоторые могут быть только одноуровневыми ( o=>o.Name), а некоторые могут быть многоуровневыми ( o=>o .EmployeeData.Address.Street.

Я хочу разработать нечто (задача MSBuild? Плагин Visual Studio? Надеюсь, первое), которое считывает все файлы .cs пользователя и выдает ошибки сборки, если заданный параметр не выражение-свойство (но что-то вроде o=>o.Contains("foo")), или если задано многоуровневое выражение, где разрешен только одноуровневый.

Я пытался сначала смотрю на скомпилированный код IL, но поскольку деревья выражений представляют собой «трюк» компилятора C#, в IL все, что я вижу, — это создание экземпляров выражений и тому подобное, и хотя я мог быпроверить каждое, если только MemberExpressions (и правильное число их) создано, оно не так уж велико.

Потом пришла Рослин на мой взгляд. Можно ли написать что-то подобное с помощью Roslyn?

11
задан TDaver 19 March 2012 в 10:05
поделиться