31

メソッドを調べて、スローされる可能性のある例外についてXMLコメントを追加するツール、できればVS2008/2010にプラグインするツールが必要です。<summary>自分で入力するので、または他のXMLタグを生成したくありませんが、 private/protectedメソッドでも、どの例外がスローされるかを確認できれば便利です。それ以外の場合は、メソッドを調べて、メソッド内のすべてのメソッド呼び出しにカーソルを合わせて例外のリストを表示し、そのメソッドの<exceptionリストを更新して例外のリストを含めます。多分VSマクロはこれを行うことができますか?

これから:

private static string getConfigFilePath()
{
    return Path.Combine(Environment.CurrentDirectory, CONFIG_FILE);
}

これに:

/// <exception cref="System.ArgumentException"/>
/// <exception cref="System.ArgumentNullException"/>
/// <exception cref="System.IO.IOException"/>
/// <exception cref="System.IO.DirectoryNotFoundException"/>
/// <exception cref="System.Security.SecurityException"/>
private static string getConfigFilePath()
{
    return Path.Combine(Environment.CurrentDirectory, CONFIG_FILE);
}

更新: ツールはメソッドを再帰的に実行する必要があるようです。たとえば、method1は、throwingとして文書化されているmethod3を呼び出すmethod2を呼び出すNullReferenceExceptionため、method2とmethod1の両方がツールによってthrowingとして文書化されますNullReferenceException。また、ツールは重複を排除する必要があります。たとえば、メソッド内の2つの呼び出しがスローとして文書化されている場合DirectoryNotFoundException、メソッドは1回だけリスト<exception cref="System.IO.DirectoryNotFoundException"/>されます。

4

4 に答える 4

9

長い答えと短い答えは、これは不可能だということです。Java とは異なり、どの .NET 言語でも、スローされる可能性のある例外のリストを関数が報告する必要はありません (つまり、呼び出した関数でスローされる可能性のある例外をキャッチまたは報告する必要があります)。このため、関数がスローする可能性のあるすべての例外の完全なリストを決定する一般的な方法はありません (演算子、コンストラクターなどを含む、関数のように記述されたものすべてをカバーするためにここで関数という言葉を使用しています)。特定の関数が呼び出す可能性のあるものによってスローされる可能性のある例外に関する保証はありません。

制限を設けたい場合は、MSDN をスキャンして特定の .NET ライブラリ呼び出しの適切な記事を探し、そこにある例外のリスト (存在する場合) を使用して再帰的にリストを確立するようなものを作成することが考えられます。投げられる可能性のあるもの。ただし、これはサードパーティのライブラリをカバーしたり、ランタイムによってスローされた例外をキャッチしたりすることはありません ( OutOfMemoryException, StackOverflowException, NullReferenceException[さらに一歩進んで例外分析で null 参照の可能性があるかどうかも判断しない限り) 、しかし、これもまた、完全に一般的な意味で行うことは不可能のようです])。

これは C# チームによって 1 回か 2 回カバーされていると確信しています (Eric Lippert が SO でこれに関する質問にまだ回答していない場合は驚くでしょう)、それが要約されたことはかなり確信しています。これに:この種のシステムは一部の人々にとって有用で価値がありますが、その使用を強制する(そして、スローされた可能性のあるすべての例外を報告またはキャッチすることを強制する)try { ... } catch (Exception ex) { ... }と、ハウスキーピングを回避するために多くのブロックが発生し、ブランケット、サイレントキャッチは、報告されていない例外よりもはるかに悪い(IMHO)です。

于 2010-06-07T13:45:36.090 に答える
2

例外の文書化をサポートするAtomineerUtilsを使用することで、要件の一部を達成できます。

例外を生成するために、 GhostDoc、Resharper、およびAgent Johnson プラグインを使用することもできます。次の質問を参照してください: c#/.net でスローされた例外を文書化する方法

于 2010-06-07T14:03:10.657 に答える
1

RedGate ソフトウェアのException Hunterを使えば、そこまでの道のりを歩むことができます。コードの静的分析を実行し、.NET Framework 呼び出しを含む、コードのどの行によってどの例外がスローされるかを示すことができます。XML ドキュメントは作成されません。

System.OutOfMemoryExceptionしかし、私が言わなければならないのは、そのようなツールがどれほど役立つかについて現実的に考える必要があるということですSystem.ExecutionEngineException.などのエラーSystem.NotImplementedException。技術的には、これらはすべて可能ですが、現実的には、すべてのメソッドについてそれらのほとんどを文書化しようとするのは時間の価値がありません.アプリケーションの実質的にすべてのメソッドに対して数百行のコメントが表示されることになります.

于 2010-06-07T13:55:19.783 に答える
0

RedGate Exception Hunterはコードを分析して例外の可能性を調べます。その機能の一部を使用できるかもしれません。

于 2010-06-07T13:59:23.503 に答える