31

我想要一些工具,最好是插入 VS 2008/2010 的工具,它将通过我的方法并添加关于它们可能抛出的异常的 XML 注释。我不希望为我生成 XML 标记或其他 XML 标记,因为我会自己填写这些标记,但如果即使在/方法上我也能看到可能引发哪些异常<summary>,那就太好了。否则,我会发现自己正在浏览这些方法并将鼠标悬停在其中的所有方法调用上以查看异常列表,然后更新该方法的列表以包含这些异常。也许VS宏可以做到这一点?privateprotected<exception

由此:

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 调用 method2 调用 method3 记录为 throwing NullReferenceException,因此该工具将 method2 和 method1 记录为也 throwing NullReferenceException。该工具还需要消除重复项,例如,如果方法中的两个调用被记录为 throwing DirectoryNotFoundException,则该方法只会列出<exception cref="System.IO.DirectoryNotFoundException"/>一次。

4

4 回答 4

9

长而短的答案是这是不可能的。与 Java 不同,.NET 语言都不要求函数报告可能引发的异常列表(这意味着您必须捕获或报告可能在它调用的函数上引发的任何异常)。因此,没有通用的方法来确定函数可能抛出的每个异常的详尽列表(我在这里使用函数这个词来涵盖像函数一样编写的任何内容,包括运算符、构造函数等),因为你有不保证给定函数可能调用的异常可能引发的异常。

如果您愿意进行限制,那么可以想象您可以编写一些可以扫描 MSDN 以查找给定 .NET 库调用的相应文章的内容,并使用那里的异常列表(如果有的话)递归地建立一个列表什么可能被抛出。但是,这不会涵盖任何第三方库或捕获运行时抛出的任何异常 ( OutOfMemoryException, StackOverflowException, NullReferenceException[ 除非您想更进一步并让您的异常分析还确定是否存在空引用的任何可能性, 但这似乎也不可能在完全一般意义上做到])。

我很确定 C# 团队已经讨论过一两次(如果 Eric Lippert 尚未在 SO 上回答有关此问题的问题,我会感到惊讶),但我很确定它归结为对此:虽然这种系统对某些人有用且有价值,但强制使用它(并强制您报告或捕获所有可能引发的异常)导致了很多try { ... } catch (Exception ex) { ... }块以避免内务管理,并且毯子,沉默捕获比未报告的异常要糟糕得多(恕我直言)。

于 2010-06-07T13:45:36.090 回答
2

您可以使用支持记录异常的AtomineerUtils来满足您的部分要求。

You can also use GhostDoc, Resharper and Agent Johnson Plugin for generating exceptions. See the following question: How to document thrown exceptions in c#/.net

于 2010-06-07T14:03:10.657 回答
1

RedGate 软件的Exception Hunter将帮助您成功。它可以对您的代码进行静态分析,并向您显示哪些代码行将引发哪些异常——包括 .NET Framework 调用。它不会为您编写 XML 文档。

但是,我不得不说,你需要对这样一个工具的有用性保持现实......由于极其不寻常的情况可能会发生许多异常,例如System.OutOfMemoryExceptionand System.ExecutionEngineException,或者由于程序员错误,例如System.NotImplementedException。从技术上讲,这些都是可能的,但实际上,尝试为每种方法记录其中的大部分是不值得您花时间的……您最终会为应用程序中的每种方法添加数百行注释。

于 2010-06-07T13:55:19.783 回答
0

RedGate Exception Hunter会分析代码以查找可能的异常。也许你可以使用它的一些功能。

于 2010-06-07T13:59:23.503 回答