是否可以在不编译的情况下调用C#词汇/语法分析器?

是否可以在不编译的情况下调用C#词汇/语法分析器?,c#,.net,codedom,lexical-analysis,compiler-as-a-service,C#,.net,Codedom,Lexical Analysis,Compiler As A Service,考虑到这一点,调用整个C#内存编译器。仅当需要时:将文本解析为词素流,检查它们并退出 在当前版本的中是否可能,如果不可能-是否可能?如果您可以使用Mono,我相信您可能可以使用 这里有一个链接可以查看。至于微软C#团队计划做什么,在某个时候把C#编译器变成一个“服务”——但不清楚这意味着什么或者什么时候会发生。虽然代码看起来像是在内存中编译的(CompilerParameters.GenerateInMemory),但实际情况并非如此。与Visual Studio中使用的编译器相同的编译器用于编

考虑到这一点,调用整个C#内存编译器。仅当需要时:将文本解析为词素流,检查它们并退出


在当前版本的中是否可能,如果不可能-是否可能?

如果您可以使用Mono,我相信您可能可以使用


这里有一个链接可以查看。至于微软C#团队计划做什么,在某个时候把C#编译器变成一个“服务”——但不清楚这意味着什么或者什么时候会发生。

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

只需将GenerateInMemory设置为false并在完成后删除OutputAssembly,就可以得到与语法检查等效的结果


虽然这听起来有点倒退,但它的巨大好处是不会给进程带来任何内存压力。这会让你一直呆到C#5.0发布。

正确。Microsoft C#团队可能会在C#5.0中打开他们的编译器,但这需要一段时间。因此
GenerateInMemory=false
更快,因为它在成功构建后不会将程序集加载到内存?这是正确的。我怀疑你会注意到。您确实不想加载程序集,无法卸载它。非常感谢!我有一个使用C#CodeDom的项目,您提供了非常有用的提示。首先,我认为过程正好相反:程序集是在内存中生成并保存在磁盘上,以避免死掉的问题再次出现,但如果您仍在尝试这样做,请查看Roslyn CTP。太棒了。