我正在尋找一種以編程方式檢查.NET(C#,VB.NET,..)源代碼以執行靜態代碼分析的方法。以編程方式檢查.NET代碼
我想上的代碼執行查詢,例如: - 列表類的名字通過x- 開始 - 列表X 的所有子類 - 列表的方法,其實例化類的一個對象x - 確定方法x包含一個名爲y的變量y - 調用方法的列表方法y - ...
我在找的是一個API或其他東西,它允許我編寫能夠檢查源代碼的程序。
我正在尋找一種以編程方式檢查.NET(C#,VB.NET,..)源代碼以執行靜態代碼分析的方法。以編程方式檢查.NET代碼
我想上的代碼執行查詢,例如: - 列表類的名字通過x- 開始 - 列表X 的所有子類 - 列表的方法,其實例化類的一個對象x - 確定方法x包含一個名爲y的變量y - 調用方法的列表方法y - ...
我在找的是一個API或其他東西,它允許我編寫能夠檢查源代碼的程序。
你可以使用System.Reflection,這應該很好地爲你想要的一些東西做好把戲。至於進入IL本身,看看莫諾的Cecil。
查看DMS Software Reengineering Toolkit。
DMS爲許多語言(C,C++,Java,C#[1.2,2.0,3.0和4.0],COBOL,ECMAScript,PHP,Verilog等)提供了自動生成AST的解析器,以及符號表和控制和其中幾個數據流分析。
DMS的模式語言可用於匹配表面語法模式,並結合程序分析將代碼元素與符號表條目以及各種數據流關係結合在一起。它已被用於實施各種程序分析工具,並且旨在爲您打造自己的工具奠定基礎,而不會浪費大量時間來構建基本的程序分析基礎架構。
如何在Reflector中使用代碼模型?使用代碼模型視圖加載項,您應該能夠了解如何查詢代碼結構。
StyleCop怎麼樣? http://code.msdn.microsoft.com/sourceanalysis。但它不支持API。
爲了完成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
其實,CQLinq是基於NDepend.API,更具體的類型:
CQLinq查詢可以住在VisualStudio中進行編輯,並提供即時結果,瀏覽的功能。使用NDepend.API,您可以編寫程序來處理更棘手的問題,例如我們用NDepend.API編寫了一個Code Duplicate Finder tool。
可以驗證規則live in Visual Studio並在構建過程時間在generated HTML+javascript report。
我建議使用Roslyn這個。
你能解釋一下爲什麼嗎? – 2012-10-19 21:20:07
因爲OP說'以編程方式檢查源代碼',這就是Roslyn的全部內容。使用框架作爲C#本身的想法將非常有吸引力。 – 2012-10-25 08:39:16
除非,@monkeyget正在查看源代碼。然後他們可能會需要一個解析器。 – kenny 2009-10-26 09:43:50
或者編譯器:)。是的,我錯過了他說的「源代碼」。我想NDepend和一些IDE插件可能會有幫助。抱歉! – MichaelGG 2009-10-26 10:11:04
System.Reflection的確是一個我會研究的選項,但它似乎有限,我確定必須存在更多強大和簡單的工具來執行我想要的操作。 我在問題中提到了源代碼,但在IL上工作的工具也可以。 – Monkeyget 2009-10-26 19:18:54