C# 使用CodeDom将一种语言转换为另一种语言?

C# 使用CodeDom将一种语言转换为另一种语言?,c#,.net,vb.net,codedom,C#,.net,Vb.net,Codedom,您可以运行我的源代码作为示例 我基本上是拿着它到处玩 如果像msdn链接显示的那样构建codedom,我可以生成cs和vb代码。但是,如果我读回cs或vb代码并尝试用其他语言生成源代码,我只会得到我最初从中读取的任何代码(您将在vb文件中看到cs代码,反之亦然) 如何读入一种语言的源代码并生成另一种语言的源代码?按照示例中显示的方式进行操作是行不通的,因为您使用的是代码片段编译器Unit。实际上,它只包含一个成员,Value,它逐字地包含原始代码 现在,CodeDomProvider/CodeD

您可以运行我的源代码作为示例

我基本上是拿着它到处玩

如果像msdn链接显示的那样构建codedom,我可以生成cs和vb代码。但是,如果我读回cs或vb代码并尝试用其他语言生成源代码,我只会得到我最初从中读取的任何代码(您将在vb文件中看到cs代码,反之亦然)


如何读入一种语言的源代码并生成另一种语言的源代码?

按照示例中显示的方式进行操作是行不通的,因为您使用的是
代码片段编译器Unit
。实际上,它只包含一个成员,
Value
,它逐字地包含原始代码

现在,CodeDomProvider/CodeDomGenerator没有那么聪明,它不会在内部将逐字逐句的源代码解析成一个CodeDom树,然后以您想要的语言输出。事实上,使用dotPeak或其他方法,您可以看到在使用CodeSnippetCompileUnit的情况下,它只会输出值成员的原始内容

您需要做的是从读入的源代码手动创建一个CodeDom树,让代码生成器使用您选择的语言,并将其作为源代码写出


坦率地说,我不知道这种努力的基础设施是否是由
System.CodeDom
提供的(即为您需要的每种源语言提供一个解析器,它输出一个CodeDom树)。此外,我不知道这是否真的是最好的方法。其他方法可能包括将源代码编译为(至少是IL)并将其转换回目标语言(很像反编译器)——当然,使用这种方法,您可以(至少)从原始源代码中释放注释。

您如何“读回(正在)cs或vb代码”?他们从未实现过VB或C#的CodeDom提供程序的解析端,所以我不明白你在做什么。我不知道他们从未实现过。这几乎毁了我正在做的这个原型