Visual Studio 2010 C#プロジェクトで、try-catchブロックなしでメソッドが記述されているかどうかを確認するにはどうすればよいですか?
コードレビューアとして、コード標準esp:に準拠して適切に記述されていない関数/メソッドを検索するのは難しい場合があります。try-catchブロックがありません。
VisualStudioの[検索]オプションが正規表現をサポートしていることは知っています。しかし、この仕事を賢く実行できる正規表現は何ですか?
Visual Studio 2010 C#プロジェクトで、try-catchブロックなしでメソッドが記述されているかどうかを確認するにはどうすればよいですか?
コードレビューアとして、コード標準esp:に準拠して適切に記述されていない関数/メソッドを検索するのは難しい場合があります。try-catchブロックがありません。
VisualStudioの[検索]オプションが正規表現をサポートしていることは知っています。しかし、この仕事を賢く実行できる正規表現は何ですか?
編集(直接の答えを最初に置く):実際にはAssembly.ReflectionOnlyLoadFromを使用して、タイプとそれらのタイプのメソッドを列挙し、メソッド本体ごとにExceptionHandlingClausesを調べるのは簡単です。
解説は次のとおりです。
Red Gateは、発生する可能性のある例外の問題を追跡するためのExceptionHunterツールを提供するために使用されていました。そのページで述べたように、あなたが要求した特定のタスク(未処理の例外の広範な検索)は、自動分析ツールの助けを借りても、より高品質のソフトウェアにつながらないことが示されています。
保護された領域のないすべてのメソッドのリストを見つける必要がある場合は、実験的なアセンブリローダー(ECMA-335に従って比較的簡単に記述されたもの)の1つを使用して、ECMA-335、パーティションII、 §25.4.5および§25.4.6(この回答の最初の部分を使用する方がはるかに簡単です)。コーディング標準に準拠するために保護領域をそれぞれに追加する目的でこれらのメソッドのリストを見つける必要がある場合、私は故意に意図的に拒否するため、別の開発者を見つける必要があることを報告します私が取り組んでいるソフトウェアの品質を低下させます。
Visual Studio 2012にアクセスできる場合(ベータ版は無料でダウンロードできます!)、[コードクローンの検索]オプションを使用できます。
通常、これはソリューション全体を検索しますが、特定のコードにスコープを設定できます。これを使用すると、たとえば使い捨てオブジェクトが使用されているすべてのコードを簡単に見つけることができます。次に、usingステートメントがどこでも使用されているかどうかを確認できます。
これと同じメカニズムを使用して、特定のコードがtry/catchブロックで使用されているかどうかを確認できます。
ここにいくつかのMSDNドキュメントがあります。
Roslynを使用してコードを処理し、式ツリーを調べることで、try/catchブロックがあるメソッドとないメソッドを見つけることができると思います。
これを行うために正規表現を使用することはお勧めしません。メソッドブロックがいつ開始し、いつ終了するかに基づいてステートマシンとなる非常に複雑なスクリプトを記述し、そこにトライキャッチがあるかどうかを調べる必要があります。