複数のスレッドと並行してコマンドラインプログラムの一部を実行したいのですが、修正する必要がある静的変数が残っている可能性があります(例えば[ThreadStatic]
にするなど)。私のプロジェクトでこれを見つけるためのツールや簡単な方法はありますか?もちろんC#プロジェクトですべての静的変数を検索するにはどうすればよいですか?
単に"static"
を検索すると多くの助けにはならない:私は任意の数のスレッドで素晴らしいとfinde働く静的メソッドの多くを持っている
複数のスレッドと並行してコマンドラインプログラムの一部を実行したいのですが、修正する必要がある静的変数が残っている可能性があります(例えば[ThreadStatic]
にするなど)。私のプロジェクトでこれを見つけるためのツールや簡単な方法はありますか?もちろんC#プロジェクトですべての静的変数を検索するにはどうすればよいですか?
単に"static"
を検索すると多くの助けにはならない:私は任意の数のスレッドで素晴らしいとfinde働く静的メソッドの多くを持っている
一つの場所にあなたの静的フィールドのすべてを見つけるための最も簡単な方法と思われますVisual Studioのクラスビューパネル(C#モードではCtrl + W, C
、デフォルトではView
メニュー)を経由します。
いくつかのプリミティブフィルタを設定できます。残念ながら、静的ではありません。ただし、利用可能なフィルタを使用して、コーディングスタイルに基づいて結果をスリムにすることができます。
また、リフレクションを使用して各静的フィールドを取り出し、その属性をチェックするプログラムを作成することもできます。 ThreadStaticAttribute
がその中にいない場合は、メッセージを吐き出させてください。
さらに、実際の戦士の方法では、Assembly.Load()
を使用してアプリケーションDLLをメモリにロードしてからリフレクション検索を使用します(これは別の回答の行に沿っています)。パブリック/プライベート/プロテクトされた静的フィールドのすべての型を通して。 :)
そして、カスタム属性をチェックして、 'ThreadStaticAttribute'がないかどうか確認してください。もしそうなら、赤旗。 – Zenexer
注: 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
ところで、上記のように追加装飾されたメンバーが欠けてしまうという問題に対処するには、次のように読みにくいですが効果的な正規表現を使用してください: '(静的(?^ [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)* [=;]) ' –
便宜上、コピー/ペーストの問題がないように再入力してください:http://refiddle.com/ hhg –
これは、辞書
まず:
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 Project
やEntire 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
を確認してください。
この正規表現は、読み取り専用、仮想、...をサポートしました。
もちろん、あなたのアセンブリで反射を使用することができます。しかし、これはブルドーザーにあなたの裏庭を掃除させるようなものなら、私は知らない。 – user492238
私はすべてブルドーザーのアプローチです。 – Zenexer