从cs文件中获取方法的内容

我需要将cs文件中每个方法的内容都放到一个字符串中。 我要找的是当你输入一个cs文件时,返回一个字典,方法名称作为键,方法体作为值。

我尝试过正则表达式和反思没有成功,有人可以帮忙吗?

谢谢

我不知道它是否对您有用,但Visual Studio Addins包含一个EnvDTE对象,使您可以完全访问VB和C#语言解析器。 请参阅使用代码模型发现代码

几年前我几乎触及它,我不知道使用它有多困难,或者它有多有效,但它看起来确实会给你你需要的东西。

代码模型允许自动化客户端避免为Visual Studio语言实现解析器 ,以便发现项目中的高级定义,例如类,接口,结构,方法,属性等。

如果您完整阅读该文章,它将告诉您如何从文件中提取函数的全文

希望这可以帮助 :)

假设文件有效 (即编译),您可以从将整个文件读入字符串开始。

我从你的问题中收集到你只对方法名称感兴趣,而不是类名。 然后你需要一个正则表达式,它给你所有的public | protected | private ,可选关键字virtual / override等实例, MethodName可选参数 。 如果存在编码约定会有所帮助,因此您可以假设所有方法定义始终在一行中,而不是分布在多行上。

一旦你有了这个,只需要计算{和}来获取函数体。

最后一条建议: 谨防假设 。 他们有一个令人讨厌的习惯,就是咬你的屁股。

编辑:哎哟,忘了评论! 如果方法体中的注释中有括号,则计数可能会出错。 因此,您需要从源代码中删除所有注释,这是您的第一步。

通常,您要解决的问题是以与编译器相同的方式解析C#代码,然后保存函数的内容而不是生成代码。 因此,作为解决方案的背景,您应该查看c#语法以及如何解析它们。

根据StingyJack,一个简单的方法是创建一个只识别函数定义的正则表达式。 然后你可以假设其间的所有东西都是一个函数体。 但是,该假设不会处理一个文件中的多个类,甚至不会处理类末尾的尾随。 要处理这样的事情,你必须设计ac#compiler,因为处理完整的c#语法是唯一能够正确识别c#认为是函数的东西。

找到函数头后,计算大括号的数量,直到找到函数的结尾。

定制解析器将是最佳选择。 正如Blair在给StingyJack的评论中所说,使用正则表达式解析代码非常困难。 我尝试了一次,虽然可以将平衡括号与NET匹配,但是转义注释和字符串要复杂得多。

解析器应该使事情变得更简单。 请参阅antlr以获得良好的发电机。

至于reflection,我相信你可以尝试编译代码(只要你有所有必要的依赖关系),然后访问它内容Reflector-like。 但我会选择解析器。

NRefactory是这项工作的工具。 看看这里: http : //laputa.sharpdevelop.net/content/binary/NRefactory.wmv