您可以将我的源代码作为示例运行http://www.pastie.org/1969780
我基本上接受了这个并且玩了http://msdn.microsoft.com/en-us/library/ms404245.aspx
如果我构建像msdn链接这样的编码器,我可以生成cs和vb代码。但是,如果我读回cs或vb代码并尝试使用其他语言生成源代码,我只需获取我最初读取的代码(您将在vb文件中看到cs代码,反之亦然)。
我如何从一种语言中读取源代码并将其生成另一种语言?
答案 0 :(得分:2)
在您的示例中显示的方式不起作用,因为您使用的是CodeSnippetCompileUnit
。基本上,只包含一个成员Value
,其中包含您的原始代码。
现在,CodeDomProvider / CodeDomGenerator并不那么聪明,它不会在内部将该逐字源代码解析为CodeDom树,然后它会以您想要的语言吐出。实际上,使用dotPeak或其他任何东西,你可以看到,如果使用CodeSnippetCompileUnit,它只会输出Value-Member的原始内容。
您需要做的是从读入的源代码手动创建CodeDom树,这是您选择的语言的代码生成器,并将其作为源写出。
坦率地说,我不知道这种努力的基础设施是否由System.CodeDom
提供(即您需要的每种源语言的解析器,它输出CodeDom树)。此外,我不知道这是否真的是最好的方式。其他方法可能包括将源编译为(至少IL)并将其转换回目标语言(非常类似于反编译器) - 当然使用这种方法可以从原始源中删除(至少)注释。