我有一种感觉,.net框架中应该有这样的东西,考虑到它们提供的所有反射内容,但如果没有,那么开源替代品就足够了。
我试图构建的基本上是像Snippet Compiler这样的东西,但有一个小变化。我试图首先获取代码DOM。
我尝试通过谷歌搜索,但不确定这个术语的正确名称,所以没有结果。
编辑:由于我正在寻找用于类似智能感知的处理,实际编译代码将不起作用,因为它很可能是不完整的。抱歉,我应该首先提到这一点。
.NET的CodeDom命名空间提供了代码语言解析器的基本API,但它们没有实现。Visual Studio通过其自己的语言服务来完成这项工作。这些服务在可再发行框架中不可用。
你可以...
可能有CodePlex上的一些类似的东西或类似的网站。
更新
请参阅此相关帖子。C#的解析器
Mono项目GMCS编译器包含一个相当可重用的C#4.0解析器。而且,编写适合自己特定需求的解析器相对容易。例如,你可以重用这个:http://antlrcsharp.codeplex.com/
你尝试过使用Microsoft.CSharp.CSharpCodeProvider类吗?这是一个完整的C#代码提供程序,支持CodeDom。您只需要在文本流上调用.Parse(),就可以获得CodeCompileUnit。
var codeStream = new StringReader(code);
var codeProvider = new CSharpCodeProvider();
var compileUnit = codeProvider.Parse(codeStream);
// compileUnit contains your code dom
嗯,既然上面的方法不可行(我刚测试过),那么以下文章可能会引起兴趣。我很久以前就将其加为书签,所以我相信它只支持C# 2.0,但仍可能值得一试:
请查看Microsoft.CSharp
命名空间中的CSharpCodeCompiler
。您可以使用CSharpCodeCompiler
进行编译,并使用CompilerResults.CompiledAssembly
访问结果程序集。通过该程序集,您将能够获取类型,并通过反射获取所有属性和方法信息。
性能将相当平均,因为每当更改内容时,您都需要编译所有源代码。我不知道是否有任何方法可以让您增量编译代码片段。
对于Blindy来说可能有点晚了,但我最近发布了一个C#解析器,非常适合处理代码片段并保留注释: C# Parser and CodeDOM
它可以处理C# 4.0版本和新的“async”特性。虽然是商业软件,但价格仅是其他商业编译器的一小部分。
我真的认为很少有人意识到解析C#变得多么困难,特别是如果您需要正确解析符号引用(通常需要),除非您只是在进行格式化。尝试阅读并完全理解500多页语言规范中的类型推断部分。然后,沉思这个事实:规范实际上并不完全正确(如Eric Lippert本人所提到的)。