我正在寻找一组类(最好在.net框架中),它将解析C#代码并返回带有参数,类及其方法,属性等的函数列表。理想情况下,它将提供所需的全部内容。建立我自己的intellisense。
我觉得这样的东西应该在.net框架中,考虑到它们提供的所有反射内容,但如果没有,那么开源替代方案就足够了。
我正在尝试构建的内容基本上类似于Snippet Compiler,但有一点扭曲。我想弄清楚如何首先获得代码dom。
我尝试使用谷歌搜索,但我不确定这个的正确用语是什么,所以我空了。
编辑:由于我希望将其用于类似intellisense的处理,实际编译代码将无法正常工作,因为它很可能是不完整的。对不起,我应该先提一下。
答案 0 :(得分:5)
虽然.NET的CodeDom命名空间提供basic API for code language parsers,但它们未实现。 Visual Studio通过自己的语言服务完成此操作。这些在可再发行框架中不可用。
你可以......
可能有something on CodePlex或类似网站。
<强>更新强>
看到这篇相关的帖子。 Parser for C#
答案 1 :(得分:2)
如果你需要它来处理不完整的代码或代码中有错误的代码,那么我相信你几乎是你自己(也就是说,你将无法使用CSharpCodeCompiler
类或类似的东西。)
像ReSharper这样的工具可以自己解析,但这是prorietary。你可能可以从Mono编译器开始,但根据我的经验,编写一个可用于不完整代码的解析器是一个完全不同的游戏,可以编写一个应该在不完整代码上吐出错误的游戏。
如果您只需要类和方法的名称(基本上是元数据),那么您可以“手动”进行解析,但我想这取决于您需要的结果准确度。
答案 2 :(得分:2)
Mono项目GMCS编译器包含一个非常可重用的C#4.0解析器。而且,编写自己的解析器相对容易,它将满足您的特定需求。例如,您可以重复使用:http://antlrcsharp.codeplex.com/
答案 3 :(得分:1)
查看Microsoft.CSharp
命名空间中的CSharpCodeCompiler
。您可以使用CSharpCodeCompiler
进行编译,并使用CompilerResults.CompiledAssembly
访问结果程序集。关闭该装配,您将能够获得类型和类型,您可以使用反射获得所有属性和方法信息。
性能将非常平均,因为只要有变化,您就需要编译所有源代码。我不知道有任何方法可以让你逐步编译代码片段。
答案 4 :(得分:1)
您是否尝试过使用Microsoft.CSharp.CSharpCodeProvider课程?这是一个支持CodeDom的完整C#代码提供程序。您只需要在文本流上调用.Parse(),然后返回CodeCompileUnit。 击>
var codeStream = new StringReader(code);
var codeProvider = new CSharpCodeProvider();
var compileUnit = codeProvider.Parse(codeStream);
// compileUnit contains your code dom
击> <击> 撞击>
好吧,看到上面的内容不起作用(我刚测试过),下面的文章可能会引起人们的兴趣。很久以前我给它添加了书签,所以我相信它只支持C#2.0,但它可能还是值得的:
答案 5 :(得分:1)
对于Blindy来说可能有点晚了,但我最近发布了一个C#解析器,它非常适合这类事情,因为它设计用于处理代码片段并保留注释: C# Parser and CodeDOM
它处理C#4.0以及新的“异步”功能。它是商业化的,但只是其他商业编译器成本的一小部分。
我真的认为很少有人意识到解析C#会变得多么困难,特别是如果你需要正确解析符号引用(这通常是必需的,除非你只是在做格式化)。只需尝试即可阅读并完全理解500多页语言规范的类型推断部分。然后,冥想规范实际上并不完全正确(正如Eric Lippert本人所提到的那样)。