Как программно анализировать и изменять код C#
Что я хочу сделать, это прочитать код c#, проанализировать его, вставить некоторые вызовы методов и скомпилировать его наконец.
можно ли преобразовать исходный код C# (список строк) в объекты CodeDOM?
6 ответов
Это напрямую невозможно сделать с помощью основной платформы .NET Framework. Вам нужно использовать сторонние или дополнительные инструменты, например:
- парсер C# с открытым исходным кодом:http://www.codeplex.com/csparser
- GPLEX в паре с в C# грамматика: http://plas.fit.qut.edu.au/gplex/
это действительно старый вопрос, но стоит отметить, что принятый ответ больше не применяется. Последние Рослин проект явно направлен на раскрытие всех знаний, которые компилятор получает о вашей кодовой базе в процессе статического анализа, и предоставление всей этой информации через управляемые API для вас. Он доступен для VB и C#.
поскольку вы хотите использовать информацию статического анализа, вам понадобится Microsoft.CodeAnalysis
пакет NuGet (материал, который вам нужен для C#, находится под Microsoft.CodeAnalysis.CSharp
namespace) и некоторое время в образцы и пошаговые руководства страница в документы.
Если вы хотите иметь возможность анализировать и выполнять произвольные анализы и преобразования на исходном коде C# (или на других языках), проверьте наш инструментарий реинжиниринга программного обеспечения DMS.
DMS имеет полный интерфейс c#, строит полные абстрактные синтаксические деревья для разбираемого кода (но не CodeDom), предоставляет полный процедурный API для ходьбы/проверки/изменения ASTs. После пересмотра дерева DMS может регенерировать исходный код, соответствующий измененному дерево, либо в режиме верности, где он пытается сохранить исходный интервал, либо в режиме prettyprint, где он применяет стиль prettyprint, который можно полностью контролировать. Комментарии сохраняются в восстановленном источнике должным образом.
кроме того, DMS обеспечивает сопоставление и преобразование шаблонов исходного уровня (e.g, вы можете написать "x=x+1 ==> x++" вместо того, чтобы кодировать все дерево для проверки, взломать дерево для изменения.) См.запись о преобразованиях программы в поймите, почему это намного меньше работы..