2009-10-26 6 views
6

.NET(C#、VB.NET、..)ソースコードをプログラムで検査して静的コード解析を実行する方法を探しています。プログラムによる.NETコードの検査

Iは、以下のようなコードにクエリを実行したい: - 名前X によって始まるリストクラス - X のすべてのサブクラスをリスト - クラスX のオブジェクトをインスタンス化リストの方法を - 決定方法た場合xにyという名前の変数が含まれています - メソッドを呼び出すメソッドをリストする ...

私が探しているのは、ソースコードを調べるためのプログラムを書くためのAPIです。

答えて

5

System.Reflectionを使用することができます。これは、必要なことのいくつかをうまくやってくれるはずです。 IL自体に入っている限り、MonoのCecilをチェックしてください。

+0

@monkeygetがソースコードを見ていない限り、そうすれば、おそらくパーサーが必要になるでしょう。 – kenny

+0

またはコンパイラ:)。そうです、私は彼が "ソースコード"と言いました。私はNDependといくつかのIDEプラグインが援助の可能性があると思います。ごめんなさい! – MichaelGG

+0

System.Reflectionは確かに私が調べるオプションですが、限られているように見えます。私がしたいことのために、より強力でシンプルなツールが存在しなければならないと確信しています。 質問でソースコードを述べましたが、ILで作業しているツールもOKです。 – Monkeyget

1

なぜ静的コード解析にFxCopを使用しないのですか?

+0

彼はFxCopが何をするのかを彼に許すソフトウェアを書きたいと思っているからです。 –

9

NDependは、.NETコード構造をクエリするためのSQLに似たクエリ言語を提供します。

+0

華麗なツール。 +1はNDependの推奨です。 –

+0

NDependのプログラムインターフェイスはどこですか?言い換えれば、それは私自身のC#コードからどのように使用できますか? – Ash

+0

NDependにはある種のプログラミング/クエリ言語があると思いますが、それは私の知識の限界です。私はあなたがNDependの人々に直接連絡しなければならないと思います。 – stusmith

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

反射鏡でコードモデルを使用するとどうなりますか?コードモデルビューのアドインを使用すると、コードの構造を調べる方法を知ることができます。

0

stusmithさんの回答を完了するために、NDependが探しているようです。 NDependは、LYQクエリのコードクエリとルール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 

- >メソッドを呼び出すメソッドリストy - ...

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

デフォルトでは200 code rules以上が提案されています。既存のルールをカスタマイズする、または独自のルールを作成することは、のよく知られた C#LINQ構文のおかげで簡単です。

CQLinqクエリはVisualStudioをライブで編集し、瞬時に結果を提供し、ブラウジング機能を持つことができます。

enter image description here

実は、CQLinqはNDepend.APIに基づいており、より具体的には、名前空間NDepend.CodeModel内の型に。 NDepend.APIを使うと、CQLinqのクエリだけでもっと複雑な処理を行うプログラムを書くことができます。たとえば、NDepend.APIでCode Duplicate Finder toolと書いたとします。

ルールはlive in Visual Studio、ビルドプロセス時はgenerated HTML+javascript reportで確認できます。

0

これにはRoslynを使用することをおすすめします。

+0

理由を説明できますか? –

+0

OPは「プログラムによってソースコードを検査する」と言っています。それがRoslynのすべてです。 C#自体が使用するフレームワークを使用するという考え方は非常に魅力的です。 –

関連する問題