.NET的常量传播库

时间:2013-08-27 11:35:24

标签: c# .net f# static-analysis

是否存在用于抽象静态分析的任何开源.NET(C#/ F#)库?目前我对常数传播算法很感兴趣。

它应该是抽象的(语言独立的)和开源的,因为我想将它用作自定义算法实现的基础。

感谢。

2 个答案:

答案 0 :(得分:2)

Mono.Cecil几乎就是你想要的。它是开源的,语言抽象的,作为奖励,它是超级抛光,快速和稳定。

但它并不完全是你想要的,因为Cecil不分析C#,VB.NET或F#源代码,但它分析程序集文件(dll和exe)和程序集中包含的IL代码。对于许多静态分析区域来说它已经足够了,但是对于不断传播(我猜你的意思是文字常量,如const string STR = "MyString";const int INT = 12345;),在编译时会丢失信息,因为常量值是硬编码的代替不断使用。塞西尔也不适合进行Abstract Syntax Tree分析。

您还可以查看Microsoft Roslyn。与Cecil相反,Roslyn解析C#和VB.NET源代码,非常适合Abstract Syntax Tree分析,但它不是开源的,不支持F#,并且肯定会有变化,直到它成为RTM ,我明年会说Visual Studio 2014,(但这只是我的猜测)。

答案 1 :(得分:1)

您应该查看Common Compiler Infrastructure:Code和AST组件project。它提供了一个对象模型,用于以与语言无关的形式对.NET程序集进行静态分析。

<强>更新

CCI项目更多地被设计为编译器和工具作者的库,而不是开箱即用的用途。

也许您正在寻找更像Mono.Gendarme的东西,它是一个开源静态分析引擎,类似于FxCop。它作为Mono-Tools项目集合的一部分进行维护。