2012-02-10 5 views
12

複数のスレッドと並行してコマンドラインプログラムの一部を実行したいのですが、修正する必要がある静的変数が残っている可能性があります(例えば[ThreadStatic]にするなど)。私のプロジェクトでこれを見つけるためのツールや簡単な方法はありますか?もちろんC#プロジェクトですべての静的変数を検索するにはどうすればよいですか?

単に"static"を検索すると多くの助けにはならない:私は任意の数のスレッドで素晴らしいとfinde働く静的メソッドの多くを持っている

+3

もちろん、あなたのアセンブリで反射を使用することができます。しかし、これはブルドーザーにあなたの裏庭を掃除させるようなものなら、私は知らない。 – user492238

+1

私はすべてブルドーザーのアプローチです。 – Zenexer

答えて

11

Visual Studioでstatic:b+:i:b+:i:b*[=;]のregexpオプションを使用してファイルを検索すると、静的変数が生成されるはずです。オペレーター==も出てくるが、視覚的にフィルターをかけるのは比較的簡単でなければならない。

+3

おっと、待って、それはすてきなトリックです。私はそれが偽陽性をほとんど起こさないと思う。 +1 – Zenexer

+1

恐ろしい!ありがとう!非常に良い作品! – Christian

1

一つの場所にあなたの静的フィールドのすべてを見つけるための最も簡単な方法と思われますVisual Studioのクラスビューパネル(C#モードではCtrl + W, C、デフォルトではViewメニュー)を経由します。

いくつかのプリミティブフィルタを設定できます。残念ながら、静的ではありません。ただし、利用可能なフィルタを使用して、コーディングスタイルに基づいて結果をスリムにすることができます。

また、リフレクションを使用して各静的フィールドを取り出し、その属性をチェックするプログラムを作成することもできます。 ThreadStaticAttributeがその中にいない場合は、メッセージを吐き出させてください。

3

さらに、実際の戦士の方法では、Assembly.Load()を使用してアプリケーションDLLをメモリにロードしてからリフレクション検索を使用します(これは別の回答の行に沿っています)。パブリック/プライベート/プロテクトされた静的フィールドのすべての型を通して。 :)

+1

そして、カスタム属性をチェックして、 'ThreadStaticAttribute'がないかどうか確認してください。もしそうなら、赤旗。 – Zenexer

11

注: dasblinkenlightの回答はVisual Studio 2010以降でのみ有効です。以下は

のVisual Studio 2012およびそれ以降のための翻訳です:あなたはEdit->Find and Replace->Find in FilesメニューまたはCtrl +からFind in Filesウィンドウを開く必要があり、すべてのhttp://msdn.microsoft.com/en-us/library/2k3te2cs(v=vs.110).aspx

+2

ところで、上記のように追加装飾されたメンバーが欠けてしまうという問題に対処するには、次のように読みにくいですが効果的な正規表現を使用してください: '(静的(?^ [r \ n])\ s)+ (\(b \ r \ n))\ s)+(\ b(_ \ w + | [\ w- [0-9 _]] \ w * (?([^ \ r \ n])\ s)* [=;])|(静的(?([^ \ r \ n])\ s)+(\ b(_ \ w \ [0-9]] \ w *)\ b) | [w^[0-9_]] \ w *)\ b)(?([^ \ r \ n])\ s) ] \ w *)\ b)(?([^ \ r \ n])\ s)* [=;]) ' –

+1

便宜上、コピー/ペーストの問題がないように再入力してください:http://refiddle.com/ hhg –

+0

これは、辞書などの汎用タイプのフィールドでは機能しません。 –

1

まず:

static(?([^\r\n])\s)+(\b(_\w+|[\w-[0-9_]]\w*)\b)(?([^\r\n])\s)+(\b(_\w+|[\w-[0-9_]]\w*)\b)(?([^\r\n])\s)*[=;]

翻訳を参照しましたShift + Fショートカットキー。

次にあなたがCurrent ProjectEntire Solutionであなたの静的変数のすべてを検索するには、この正規表現を使用する必要があります。

static \w*[ \t]*\b(\w+|[\w-[0-9]]\w)\b[ \t]+\b(\w+|[\w-[0-9]]\w*)\b[ \t]*[=;] 

マインドはFind optionsセクションのオプションUse Regular Expressionsを確認してください。

この正規表現は、読み取り専用、仮想、...をサポートしました。

関連する問題