2009-10-26 147 views
6

我正在寻找一种以编程方式检查.NET(C#,VB.NET,..)源代码以执行静态代码分析的方法。以编程方式检查.NET代码

我想上的代码执行查询,例如: - 列表类的名字通过x- 开始 - 列表X 的所有子类 - 列表的方法,其实例化类的一个对象x - 确定方法x包含一个名为y的变量y - 调用方法的列表方法y - ...

我在找的是一个API或其他东西,它允许我编写能够检查源代码的程序。

回答

5

你可以使用System.Reflection,这应该很好地为你想要的一些东西做好把戏。至于进入IL本身,看看莫诺的Cecil

+0

除非,@monkeyget正在查看源代码。然后他们可能会需要一个解析器。 – kenny 2009-10-26 09:43:50

+0

或者编译器:)。是的,我错过了他说的“源代码”。我想NDepend和一些IDE插件可能会有帮助。抱歉! – MichaelGG 2009-10-26 10:11:04

+0

System.Reflection的确是一个我会研究的选项,但它似乎有限,我确定必须存在更多强大和简单的工具来执行我想要的操作。 我在问题中提到了源代码,但在IL上工作的工具也可以。 – Monkeyget 2009-10-26 19:18:54

1

为什么不使用FxCop进行静态代码分析?

+0

因为他想写软件,这将允许他做FxCop所做的事情。 – 2009-10-26 18:50:46

9

NDepend为查询.NET代码结构提供了一种类似于SQL的查询语言。

+0

辉煌的工具。 NDepend建议+1。 – 2009-10-26 09:45:31

+0

NDepend中的编程接口在哪里?换句话说,它如何从我自己的C#代码中使用? – Ash 2010-05-13 02:04:57

+0

我相信NDepend具有某种编程/查询语言...但是这是我的知识的限制。我想你必须直接联系NDepend的人。 – stusmith 2010-05-13 08:17:48

1

查看DMS Software Reengineering Toolkit

DMS为许多语言(C,C++,Java,C#[1.2,2.0,3.0和4.0],COBOL,ECMAScript,PHP,Verilog等)提供了自动生成AST的解析器,以及符号表和控制和其中几个数据流分析。

DMS的模式语言可用于匹配表面语法模式,并结合程序分析将代码元素与符号表条目以及各种数据流关系结合在一起。它已被用于实施各种程序分析工具,并且旨在为您打造自己的工具奠定基础,而不会浪费大量时间来构建基本的程序分析基础架构。

0

如何在Reflector中使用代码模型?使用代码模型视图加载项,您应该能够了解如何查询代码结构。

0

为了完成stusmith的回答,NDepend似乎就是你要找的。 NDepend允许通过LINQ查询(我们称之为CQLinq)编写代码查询和规则。 免责声明:我在这里的工具

例如开发商之一是一些CQLinq查询:

- >列表类的名字以x开头

from t in Application.Types.WithNameLike("^x") 
where t.IsClass select t 

- >列表中的所有x的子类

from t in Application.Types 
where t.DeriveFrom("MyNamespace.MyTypeX") 
select t 

- >列表的方法,其实例化类的一个对象x

from m in Application.Methods 
where m.CreateA("MyNamespace.MyTypeX") 
select m 

- > list方法调用方法y - ...

from m in Application.Methods 
where m.IsUsing("MyNamespace.MyType.MyMethodY()") 
select m 

大于200 code rules是默认提议的。定制现有规则或创建您自己的规则非常简单,这要归功于着名的 C#LINQ语法。在命名空间NDepend.CodeModel

enter image description here

其实,CQLinq是基于NDepend.API,更具体的类型:

CQLinq查询可以住在VisualStudio中进行编辑,并提供即时结果,浏览的功能。使用NDepend.API,您可以编写程序来处理更棘手的问题,例如我们用NDepend.API编写了一个Code Duplicate Finder tool

可以验证规则live in Visual Studio并在构建过程时间在generated HTML+javascript report

0

我建议使用Roslyn这个。

+0

你能解释一下为什么吗? – 2012-10-19 21:20:07

+0

因为OP说'以编程方式检查源代码',这就是Roslyn的全部内容。使用框架作为C#本身的想法将非常有吸引力。 – 2012-10-25 08:39:16