Что я хочу сделать, это прочитать код С#, проанализировать его, вставить некоторые вызовы методов и скомпилировать его в конце.
Можно ли преобразовать исходный код С# (список строк) в объекты CodeDOM?
Что я хочу сделать, это прочитать код С#, проанализировать его, вставить некоторые вызовы методов и скомпилировать его в конце.
Можно ли преобразовать исходный код С# (список строк) в объекты CodeDOM?
Невозможно сделать это с помощью основной платформы .NET Framework. Вам необходимо использовать сторонние или дополнительные инструменты, например:
Это действительно старый вопрос, но стоит отметить, что принятый ответ больше не применяется. Недавно разработанный Microsoft Roslyn проект нацелен на то, чтобы разоблачить все знания, полученные компилятором о вашей кодовой базе в процессе статического анализа, и разоблачить все эту информацию через управляемые API, чтобы вы могли использовать. Он доступен как для VB, так и для С#.
Поскольку вы хотите использовать информацию статического анализа, вам понадобится Microsoft.CodeAnalysis
пакет NuGet (материал, который вам нужен для С#, находится ниже пространство имен Microsoft.CodeAnalysis.CSharp
) и некоторое время на странице samples and walkthroughs в документах.
Попробуйте Linq over С#. Это замечательно.
Попробуйте Mono.Cecil
Если вам нужна возможность анализировать и выполнять произвольные анализы и преобразования в исходном коде С# (или на разных языках), посмотрите DMS Software Reengineering Toolkit.
DMS имеет полный интерфейс С#, строит полные абстрактные синтаксические деревья для проанализированного кода (но не CodeDom), предоставляет полный процедурный API для хождения/проверки/изменения AST. После пересмотра дерева DMS может регенерировать исходный код, соответствующий модифицированному дереву, либо в режиме верности, где он пытается сохранить исходный интервал, либо в режиме отпечатка, когда он применяет стиль отпечатка, который вы можете полностью контролировать. Комментарии сохраняются в регенерированном источнике должным образом.
Кроме того, DMS обеспечивает сопоставление и преобразование на уровне исходного кода (например, вы можете написать "x = x + 1 == > x ++" вместо того, чтобы кодировать все элементы "walk-around-tree-to-verify", взломать дерево для изменения.) См. запись на программные преобразования, чтобы понять, почему это намного меньше работает.
CSharpCodeProvider может быть тем, что вы ищете.