Выполнение, как вы показали в вашем примере, не работает, потому что вы используете CodeSnippetCompileUnit
. По сути, это просто содержит один элемент, Value
, который содержит ваш оригинальный код дословно.
Теперь, CodeDomProvider / CodeDomGenerator не настолько умен, он не будет внутренне анализировать этот дословный исходный код в дерево CodeDom, которое затем выкладывается на нужный вам язык. Фактически, используя dotPeak или что-то еще, вы можете видеть, что в случае использования CodeSnippetCompileUnit он будет просто выводить исходное содержимое Value-Member.
Что вам нужно сделать, это вручную создать дерево CodeDom из прочитанного исходного кода, используя генератор кода на выбранном вами языке, и записать его в качестве исходного.
Честно говоря, я не знаю, обеспечивает ли инфраструктура для такой работы System.CodeDom
(а именно анализатор для каждого исходного языка, который вам нужен, который выводит дерево CodeDom). Кроме того, я не знаю, действительно ли это лучший способ сделать это в любом случае. Другие подходы могут включать компиляцию исходного кода (по крайней мере, IL) и преобразование его обратно в целевой язык (во многом как декомпилятор) - конечно, при использовании этого подхода вы теряете (по крайней мере) комментарии из исходного источника.