是否可以在没有编译的情况下调用C#词法/句法分析器?

时间:2010-04-09 20:59:40

标签: c# .net codedom lexical-analysis compiler-as-a-service

考虑这个question的SO,其中调用整个C#内存编译器。仅需要lexical and syntactic analyzing时:将文本解析为词汇流,检查它们并退出。

是否有可能在System.CodeDom.Compiler的当前版本中,如果不是 - 它会是吗?

2 个答案:

答案 0 :(得分:6)

如果您可以使用Mono,我相信您可以使用it has a C# parser/lexer

这是一个值得关注的链接。至于MS C#团队计划做什么,there is some talk在某种程度上使C#编译器成为“服务” - 但目前还不清楚这意味着什么或何时会发生。

答案 1 :(得分:1)

虽然看起来代码是在内存中编译的(CompilerParameters.GenerateInMemory),但实际上并不是这样。与Visual Studio中使用的编译器相同的编译器用于编译代码(csc.exe)。它由CreateProcess启动(非常类似于Process.Start)并在进程外运行以将代码编译到临时文件夹中的磁盘上的程序集。 GenerateInMemory选项调用Assembly.LoadFrom()来加载程序集。

只需将GenerateInMemory设置为false,即可完成语法检查,并在完成后删除OutputAssembly。

虽然这可能听起来有点倒退,但它带来的巨大好处是,这不会给你的过程带来任何内存压力。这将阻止你直到C#5.0发货。