Как разобрать простое утверждение в объекте CodeDom - PullRequest
1 голос
/ 16 марта 2010

Мне нужно проанализировать простую инструкцию (по сути, цепочку вызовов функций для некоторого объекта), представленную в виде строковой переменной, в объекте CodeDom (вероятно, подкласс CodeStatement). Я также хотел бы предоставить некоторые импорта по умолчанию пространств имен, чтобы можно было использовать менее подробные операторы.

Я осмотрел SO и Интернет, чтобы найти какие-то предложения, но я совершенно запутался в том, что возможно, а что нет, и как проще всего это сделать. Например, этот вопрос кажется почти тем, что я хочу, к сожалению, я не могу использовать решение, поскольку CodeSnippetStatement, похоже, не поддерживается механизмом исполнения, который я использую (механизм правил WF).

Какие-нибудь предложения, которые могли бы помочь мне / указать мне правильное направление?

Ответы [ 2 ]

2 голосов
/ 17 марта 2010

Нет библиотеки или функции для анализа кода C # в объектах CodeDOM как части стандартных библиотек .NET. В библиотеках CodeDOM есть несколько методов, которые, похоже, предназначены для этого, но на самом деле ни один из них не реализован. Насколько я знаю, в Visual Studio доступна некоторая реализация (используемая, например, дизайнерами), но она только внутренняя.

CodeSnippetStatement - это узел CodeDOM, который позволяет поместить любую строку в сгенерированный код. Если вы хотите создать дерево CodeDOM только для генерации исходного кода на C #, то обычно это нормально (генератор исходного кода просто печатает строку на выходе). Если движок WF должен понимать код в вашей строке (а не просто генерировать исходный код и компилировать его), то CodeSnippetStatement не будет работать.

Однако существуют сторонние инструменты, которые можно использовать для анализа исходного кода C #. В одном проекте, над которым я работал, мы использовали NRefactory Library (которая используется в SharpDevelop), и она работала довольно хорошо. Он дает вам некоторое дерево (AST), представляющее проанализированный код, и я боюсь, что вам нужно будет преобразовать его в соответствующее дерево CodeDOM самостоятельно.

1 голос
/ 17 марта 2010

Я нашел библиотечную реализацию здесь , которая, кажется, охватывает почти все, что мне нужно для моих целей. Я не знаю, достаточно ли он надежен для использования в бизнес-сценариях, но для моих модульных тестов это почти все, что я могу просить.

...